为什么$(“div> div”)的工作方式不同于$(“div”)。children(“div”)?

时间:2011-07-14 18:37:25

标签: jquery jquery-selectors jquery-traversing

我有一个奇怪的问题,我不能使用普通的sizzle选择器来正确选择jQuery中的东西:

这两行没有做同样的事情。

ele.children("div.a > div").addClass("badActive");
ele.children("div.b").children("div").addClass("active");

http://jsfiddle.net/wGvEu/1/

2 个答案:

答案 0 :(得分:7)

ele.children("div.a > div")选择divdiv.a个元素(来自>组合子)和ele(来自.children()的子项呼叫)。它还意味着ele本身代表div.a元素。

ele.children("div.b").children("div")选择div元素的div.bele元素,它们本身就是ele的子元素。 div.b本身可以是任何类型的元素,但它必须包含div.b个孩子,其div个孩子需要有.find()个孩子。

正如Felix Kling在上述评论中所说,您需要使用>来搜索所有后代。这适用于您使用ele.find("div.a > div")组合子的第一个案例,{{1}}。

答案 1 :(得分:1)

你想要的可能是:

ele.find("div.a > div").addClass("active");

它只使用一个嘶嘶声的选择器,实现你想要的。 BoltClock是正确的,为什么你的两个例子不起作用。另一种说法是:.children()只获得直接子项,而.find()将获得“current”元素下面的层次结构中的任何内容。