-1

第一的:

  .closest('.notice')

它会占用 .notice 本身,还是会占用最接近 .notice 的 dom 树?

.next('.notice')- 它会抓住 dom 树下的东西,对吧?

另一个:

$('#celebTree ul').hide().before('<div class="bla"></div>').prev().addClass('handle closed')

使用 .prev jQuery 应该在“bla”之前选择一个元素并应用该类。但它将类应用于我使用 .before 方法插入的元素。为什么会这样?

4

2 回答 2

0
.closest('.notice')

.closest()将遍历 DOM 树(向上)并返回匹配选择器的第一个祖先。

.next('.notice')

.next()如果它与选择器匹配,将返回紧随其后的兄弟。

$('#celebTree ul').hide().before('<div class="bla"></div>').prev().addClass('handle closed')

这会将类应用于您正在插入的元素,因为.before()将返回调用它的相同 jQuery 对象(插入的元素不会添加到匹配的集合中)。由于匹配的元素现在在其前面插入了您的内容,因此.prev()将返回新元素。

于 2012-07-20T07:16:28.427 回答
0

.closest('notice')是匹配的最接近的父级或元素本身(如果匹配):

<div class="notice"> //This will be selected with $("#target").closest(".notice")
    <div id="target"></div>
</div>

<div class="notice">
    <div id="target" class="notice"></div>  //This will be selected with $("#target").closest(".notice")
</div>

.next('notice')如果匹配,则选择下一个元素兄弟:

<div id="target"></div>
<div class="notice"></div> //This will be selected with $("#target").next(".notice")

<div id="target"></div>  //NOTHING will be selected with $("#target").next(".notice")
<div></div>

.before()不会返回新的 jQuery 对象,它会返回您之前插入内容的旧对象:

$('#celebTree ul').hide().before('<div class="bla"></div>') 
//Returns the '#celebTree ul'. NOT jQuery object wrapping '<div class="bla"></div>'

由于您只是在元素之前插入并prev'#celebTree ul'此处进行操作,prev因此将采用前一个元素兄弟,即该内容。

于 2012-07-20T07:17:39.990 回答