简体   繁体   English

如何使用jQuery选择叶子节点:包含选择器?

[英]How to select leaf node using jQuery :contains selector?

I want to get leaf elements containing specific text, and I used :contains selector. 我想获取包含特定文本的叶子元素,并使用了:contains选择器。 However, this selector selects includes every parent nodes too. 但是,此选择器也会选择包括每个父节点。 Here is my example. 这是我的例子。

<div id='parent1'>
    <p id='target1'>Red balloon</p>
    <div id='target2'>Blue balloon</div>
</div>
<div id='parent2'>
    <span id='target3'>Brown balloon</span>
</div>

In this case, I just want to get elements containing text balloon . 在这种情况下,我只想获取包含文本Balloon的元素。 I expected to get 3 elements( target1 , target2 , target3 ) by $(":contains('balloon')") , but it returns every nodes including parent nodes of targets . 我期望通过$(":contains('balloon')")获得3个元素( target1target2target3 $(":contains('balloon')") ,但是它返回每个节点,包括target的父节点。 (eg html , body , and every parent div ) (例如htmlbody和每个父div

How can I select only targets ? 如何仅选择目标

ps Above HTML is only example. ps HTML以上只是示例。 HTML can be vary, so the answer should be generic. HTML可以有所不同,因此答案应该是通用的。

  1. use indexOf("balloon") > -1 to find id the word balloon is found 使用indexOf("balloon") > -1查找找到单词balloon ID

 var arr = $("div").children().map(function(){ if($(this).text().indexOf("balloon") > -1 ) return $(this).attr("id") }).get(); console.log(arr) 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id='parent1'> <p id='target1'>Red balloon</p> <div id='target2'>Blue balloon</div> </div> <div id='parent2'> <span id='target3'>Brown balloon</span> </div> 

The solution below, look for all elements containing the word and clone these elements, This way we can be sure only to get "correct" amount of elements 下面的解决方案,查找包含单词的所有元素并克隆这些元素,这样我们就可以确保仅获得“正确”数量的元素

Just remove .length and you have access to the elements. 只需删除.length访问元素。

 var s = $(":contains('balloon')").not("script").filter(function() { return ( $(this).clone() //clone the element .children() //select all the children .remove() //remove all the children .end() //again go back to selected element .filter(":contains('balloon')").length > 0) }).length; console.log(s) 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id='parent1'> <p id='target1'>Red balloon</p> <div id='target2'>Blue balloon</div> </div> <div id='parent2'> <span id='target3'>Brown balloon</span> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM