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

时间:2013-10-19 06:35:50

标签: jquery

jQuery documentation状态

  

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

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

elem.closest(selector)

和选择器不是elem的祖先,什么都找不到。但是,在它读取的同一文档中略低一点

  

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

我认为它意味着它会一直到< body>标记得到它的男人。注意,这里没有提到祖先

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

4 个答案:

答案 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本身