首先:
.closest('.notice')
这将需要.notice本身,或者它将最接近dom树上的.notice?
.next('.notice')
- 它会抓住dom树上的什么,对吗?
另一个:
$('#celebTree ul').hide().before('<div class="bla"></div>').prev().addClass('handle closed')
使用.prev jQuery 应该在“bla”之前选择一个元素并应用该类。但它正在将类应用于我使用.before方法插入的元素。为什么会这样?
答案 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
将采用前一个元素兄弟,即该内容。