jQuery最近 – 它是如何工作的?

jQuery 文档说明

对于集合中的每个元素,通过测试元素本身并遍历DOM树中的祖先来获取与选择器匹配的第一个元素。

在我看来,这里的操作词是祖先 。 这意味着,如果一个人使用

elem.closest(selector) 

和选择器不是元素的祖先,什么都不会被发现。 但是,在它读取的同一文档中略低一点

向上移动DOM树,直到找到所提供选择器的匹配项

我解释为意味着它会一直到标签来获取它的人。 注意,这里没有提到父母祖先

我写了一个快速的小提琴 ,似乎表明它是前一个正确的陈述。 但是,我认为最好在这里发帖,看看是否有其他人可以证实这一点。

.closest()的实现是这样的(在伪代码中):

 while (node) { if (node matches selector) { return node; } node := node.parentNode } 

换句话说,它仅通过跟随父链来遍历。

当它在第二个引号中显示“在DOM树中移动”时,它意味着在第一个引用中“在DOM树中遍历其祖先”。 引用的两个陈述之间没有区别; 一个是对另一个的解释,恰好稍微不那么具体。

.closest()方法在DOM树中搜索这些元素及其祖先,并从匹配元素构造一个新的jQuery对象。

例如:

 $( "li.item-a" ).closest( "ul" ).css( "background-color", "red" ); 

这将改变level-2的颜色,因为它是在DOM树上行进时遇到的第一个颜色。

jQuery nearest()选择选择器的第一个父元素(通过它的HTML标记),或选择器本身(如果它匹配)。 就像你选择’p’元素($(’p#someid’)),它开始从你的’p’元素中搜索,如果没有匹配,它会移动到它的父元素。 等等

示例HTML:

 
Div

paragraph

$(’#id’)。nearest(’div)//将选择div#select_me,作为最近的父div

在哪里

  

Div

paragraph

$( ‘#select_me_now’)最接近(P); //将选择p#select_me_now本身