我希望找到与选择器匹配的所有元素,但如果它已经包含在匹配的元素中,则不会。
$('#container').find('.child').not('.child .child');
注意,.child元素不是必需的直接子代。
为什么这个不行?
我想选择出现在$('#container').find('.child')中的所有元素,但是排除/filter()在这里的任何元素,因为它的祖先之一是.child
var children = $('#container').find('.child').filter(function (i, el) {
return !$(el).closest('.child').length;
});由于某些原因,这两种方法都不起作用,JSFIDDLE
改编自@RonenCypis答案的片段
var selector = ' .child ';
var children = $('#container').find(selector).filter(function(i, el) {
return !$(el).closest(selector).length;
});
children.css('background-color', 'blue');#container div {
float: left;
display: inline-block;
width: 50px;
height: 50px;
color: #fff;
margin: 10px;
background-color: red;
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div class="child">one
<div class="child">one one</div>
</div>
<div class="child">two
<div class="child">two one</div>
</div>
<div class="child">three</div>
<div class="child">four
<div class="child">four one</div>
</div>
</div>
发布于 2015-11-19 15:24:18
您可以使用parents而不是closest来查找当前元素的祖先。除了祖先之外,closest还匹配当前元素。
var selector = ' .child ';
var children = $('#container').find(selector).filter(function(i, el) {
return !$(el).parents(selector).length;
});
children.css('background-color', 'blue');#container div {
float: left;
display: inline-block;
width: 50px;
height: 50px;
color: #fff;
margin: 10px;
background-color: red;
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div class="child">one
<div class="child">one one</div>
</div>
<div class="child">two
<div class="child">two one</div>
</div>
<div class="child">three</div>
<div class="child">four
<div class="child">four one</div>
</div>
</div>
发布于 2015-11-19 12:35:05
可以将选择器与:not()选择器结合使用。
$('div').find('[role="tabpanel"]:not(:has([role="tabpanel"]))');发布于 2015-11-19 12:38:32
JsFiddle中的演示
您可以使用filter():
<div id="container">
<div class="child">
<div class="child"></div>
</div>
<div class="child"></div>
<div class="child"></div>
<div class="child">
<div class="child"></div>
</div>
</div>CSS
#container div {
display: inline-block;
width: 50px;
height: 50px;
margin: 10px;
background-color: red;
}Javascript
var selector = '.child';
var children = $('#container').find(selector).filter(function(i, el){
return $(el).find(selector).length == 0;
});
children.css('background-color', 'blue');这段代码将只更改没有附加.child元素的.child元素的背景色。
https://stackoverflow.com/questions/33804072
复制相似问题