从具有 jQuery 的匹配元素集中删除
Remove from set of matched Elements with jQuery
我有下面的例子html:
<div id="root">
<span>A</span><!--select-->
<span>B</span><!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
<div>
<p>
<span>F</span><!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
我想要 select 所有 spans
除了那些是其他 divs
的孩子。 spans
是 children 的其他元素(例如 p, button
或任何其他 )应该 selected。 p
只是一个例子。这意味着我想要 span A, B and F
。我试过了:
$("#root").find("span").not("div span");
但是 .not("div span")
删除所有跨度,因为根元素也是 div
。 jQuery有办法吗?
您可以有一个选择器来定位直接子跨度元素和直接 p 元素中的跨度元素:
var target = $("#root").find("> span, >*:not(div) span");
$(function(){
$("#root").find("> span,*:not(div) span").css('color','red');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="root">
<span>A</span><!--select-->
<span>B</span><!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
<div>
<p>
<span>F</span><!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
你可以试试
$('#root span').not('#root div span').css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="root">
<span>A</span>
<!--select-->
<span>B</span>
<!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
</div>
<p>
<span>F</span>
<!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
注意:您的 html 无效,因为 p
不能将 div
元素作为其子元素。
您可以使用:
$("#root").find("span").not("#root>span");
您可以使用.filter()
方法:
$('#root span').filter(function(){
return this.parentNode.id == 'root' || this.parentNode.tagName.toLowerCase() != 'div'
}).addClass('found');
.found{border:solid 1px red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="root">
<span>A</span>
<!--select-->
<span>B</span>
<!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
<div>
<p>
<span>F</span>
<!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
我有下面的例子html:
<div id="root">
<span>A</span><!--select-->
<span>B</span><!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
<div>
<p>
<span>F</span><!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
我想要 select 所有 spans
除了那些是其他 divs
的孩子。 spans
是 children 的其他元素(例如 p, button
或任何其他 )应该 selected。 p
只是一个例子。这意味着我想要 span A, B and F
。我试过了:
$("#root").find("span").not("div span");
但是 .not("div span")
删除所有跨度,因为根元素也是 div
。 jQuery有办法吗?
您可以有一个选择器来定位直接子跨度元素和直接 p 元素中的跨度元素:
var target = $("#root").find("> span, >*:not(div) span");
$(function(){
$("#root").find("> span,*:not(div) span").css('color','red');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="root">
<span>A</span><!--select-->
<span>B</span><!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
<div>
<p>
<span>F</span><!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
你可以试试
$('#root span').not('#root div span').css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="root">
<span>A</span>
<!--select-->
<span>B</span>
<!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
</div>
<p>
<span>F</span>
<!--select-->
<div>
<span>G</span>
</div>
</p>
</div>
注意:您的 html 无效,因为 p
不能将 div
元素作为其子元素。
您可以使用:
$("#root").find("span").not("#root>span");
您可以使用.filter()
方法:
$('#root span').filter(function(){
return this.parentNode.id == 'root' || this.parentNode.tagName.toLowerCase() != 'div'
}).addClass('found');
.found{border:solid 1px red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="root">
<span>A</span>
<!--select-->
<span>B</span>
<!--select-->
<div>
<span>C</span>
<span>D</span>
<div>
<span>E</span>
</div>
<div>
<p>
<span>F</span>
<!--select-->
<div>
<span>G</span>
</div>
</p>
</div>