jQuery问我有些问题需要理解

时间:2012-07-20 07:11:06

标签: jquery

首先:

  .closest('.notice')

这将需要.notice本身,或者它将最接近dom树上的.notice?

.next('.notice') - 它会抓住dom树上的什么,对吗?

另一个:

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

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

2 个答案:

答案 0 :(得分:0)

.closest('.notice')

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

.next('.notice')

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

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

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

答案 1 :(得分: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将采用前一个元素兄弟,即该内容。