jQuery documentation状态
对于集合中的每个元素,通过测试元素本身并遍历DOM树中的祖先来获取与选择器匹配的第一个元素。
在我看来,这里的操作词是祖先。这意味着如果使用
elem.closest(selector)
和选择器不是elem的祖先,什么都找不到。但是,在它读取的同一文档中略低一点
向上移动DOM树,直到找到所提供选择器的匹配
我认为它意味着它会一直到< body>标记得到它的男人。注意,这里没有提到父或祖先。
我写了一个快速fiddle,似乎表明这是前一个正确的陈述。但是,我认为最好在这里发帖,看看是否有其他人可以证实这一点。
答案 0 :(得分:9)
.closest()
的实现就像这样(伪代码):
while (node) {
if (node matches selector) {
return node;
}
node := node.parentNode
}
换句话说,它仅通过跟随父链来遍历。
答案 1 :(得分:5)
当它在第二个引用中说“跳过DOM树”时,它意味着在你的第一个引用中“在DOM树中遍历它的祖先”。引用的两个陈述之间没有区别;一个是对另一个的解释,恰好是稍微不那么具体。
答案 2 :(得分:2)
.closest()方法在DOM树中搜索这些元素及其祖先,并从匹配元素构造一个新的jQuery对象。
前:
$( "li.item-a" ).closest( "ul" ).css( "background-color", "red" );
这将改变level-2的颜色,因为它是在DOM树上行进时遇到的第一个颜色。
答案 3 :(得分:1)
jQuery nearest()选择选择器的第一个父元素(通过它的HTML标记),或选择器本身(如果它匹配)。就像你选择'p'元素($('p#someid'))一样,它会从你的'p'元素开始搜索,如果没有匹配,它会移动到它的父元素。等等
示例HTML:
<div id='select_me'>Div
<p id='id'>paragraph</p>
</div>
$('#id')。最近('div)//将选择div#select_me,作为最近的父div
其中
<p id='select_me'>Div
<p id='select_me_now'>paragraph</p>
</p>
$( '#select_me_now')接近的(P); //将选择p#select_me_now本身