鉴于这种:
<div id="div1">
<div id="div2">
<div id="div200">
<div id="div3" class="b">
</div>
<div id="div300">
<div id="div4" class="b">
<div id="div5">
<div id="div6" class="b">
</div>
</div>
</div>
<div>
<div>
<div>
</div>
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来查找属于"b"类的元素的子(深),而不是那些嵌套在匹配元素中的子元素.
测试用例:
这就是我需要的:
情况1:
$("#div1").some_jquery_syntax(".b")
Should return:
div3, div4
Run Code Online (Sandbox Code Playgroud)
案例2:
$("#div5").some_jquery_syntax(".b")
Should return:
div6
Run Code Online (Sandbox Code Playgroud)
请注意,困难的部分是我必须从div1开始时跳过div2.所以我不能只使用$("#div1").find("> .b").
我的尝试:
我试过这个:
$("#div1").find(".b")
[<div id="div3" class="b"></div>, <div id="div4" class="b"></div>, <div id="div5" class="b"></div>]
Run Code Online (Sandbox Code Playgroud)
不好:我不想要div5,因为它嵌套在div4中.
我试过这个:
$("#div0").find(".b").not(".b .b")
[<div id="div3" class="b"></div>, <div id="div4" class="b"></div>]
Run Code Online (Sandbox Code Playgroud)
从div0开始时哪个好,但是从div4开始不起作用:
$("#div5").find(".b").not(".b .b")
[]
Run Code Online (Sandbox Code Playgroud)
Sam*_*son 16
找到直接的大孩子:
?$("#div1").children().children(".b");
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/jonathansampson/Dy6GJ/
如果您不知道要走多远,但希望所有内容.b都不在a内.b,请在尊重父限制的同时使用过滤器.你可以使用这个.parentsUntil方法:
var parent = "#div1";
$(".b", parent).filter(function(){
return !$(this).parentsUntil(parent, ".b").length;
}).css("border", "1px solid red");?????????????????
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/jonathansampson/Dy6GJ/3/
小智 5
一般(只保证课程时):
$("#div1").find(".b:not(.b .b)")
Run Code Online (Sandbox Code Playgroud)
如上所述(可能比一般更快,但未经测试):
$("#div1").find("div.b:not(div.b div.b)")
Run Code Online (Sandbox Code Playgroud)
"所有.b都不是.b的后代"