jQuery-它是如何工作的?

jQuery-它是如何工作的?,jquery,Jquery,jQuery声明 对于集合中的每个元素,通过测试元素本身并在DOM树中遍历其祖先,获取与选择器匹配的第一个元素 在我看来,这里的操作词是祖先。这意味着如果一个人使用 elem.closest(selector) 选择器不是elem的祖先,什么也找不到。但是,在它读取的同一个文档中,位置稍微低一点 沿DOM树向上移动,直到找到与提供的选择器匹配的项 我认为这意味着它会一直走到标签上,找到它的男人。注意,这里没有提到父母或祖先 我写了一篇速记,似乎表明前一句话是正确的。然而,我认为最好在这里发帖,

jQuery声明

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

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

elem.closest(selector)
选择器不是elem的祖先,什么也找不到。但是,在它读取的同一个文档中,位置稍微低一点

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

我认为这意味着它会一直走到标签上,找到它的男人。注意,这里没有提到父母或祖先


我写了一篇速记,似乎表明前一句话是正确的。然而,我认为最好在这里发帖,看看是否有其他人可以证实这一点。

当第二个引文中提到向上遍历DOM树时,它意味着在第一个引文中遍历DOM树中的祖先。引用的两种说法没有区别;一个是对另一个的解释,恰好不太具体。

的实现。在伪代码中最接近的工作方式如下:

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

换句话说,它只沿着父链向上遍历。

jQuery closest通过选择器的HTML标记或选择器本身(如果匹配)选择第一个父元素。这就像您选择'p'元素$'psomeid',它从您的'p'元素开始搜索,如果没有匹配项,它将移动到它的父元素。等等

HTML示例:

<div id='select_me'>Div
    <p id='id'>paragraph</p>
</div>

$“立即选择我”。closestp;//将选择pselect_me_now本身

。最近的方法在DOM树中搜索这些元素及其祖先,并从匹配的元素构造新的jQuery对象

例:


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

这两个语句并不相互排斥,事实上它们的意思是相同的。它确实会进入标签,它会进入文档根目录。我想你是对的。这两种说法都不对。但这仍然让我感到有点困惑。在我的小提琴中,第一个输入有一个div,它的直接祖先是data-x属性,最近的报告找到了它。第二个输入没有这样一个div作为祖先,但它确实作为其父div的兄弟存在,但它没有被找到。但是为什么在这种情况下,单击我的小提琴中的第二个输入(没有一个div作为直接父div携带data-x attrib)却什么也找不到?如果它一直运行到DOM树,它应该已经找到了第一个输入的父div,该输入具有data-x属性。@DroidOS:是,它什么也找不到。为什么它应该找到第一个输入的父项而不是第二个输入的父项?这就是我感到困惑的地方。现在你说的是家长。一分钟前,我们在谈论如何爬上DOM树。在DOM树上,我的意思是,不管它是否是父母,它只会得到它的男人。请注意,文档中根本没有提到父级。@DroidOS:父级是直接的祖先。祖先是包含您的元素的元素,这意味着您父母的任何父母/祖先也是您自己的祖先。正如您所发现的,该行为与您第一次引用中所描述的内容相匹配。第二条语句只不过是对第一条语句的解释。@DroidOS:向下搜索DOM树确实意味着搜索其他元素中的每个元素,这是因为一个元素可以有任意数量的子元素,而共享同一父元素的所有子元素都是彼此的兄弟。但是,单个子元素只能有一个父元素这适用于除根元素之外的每个元素,因此向上移动DOM树意味着只搜索父元素/祖先。您的伪代码确认了我看到的行为。node:=node.previous是我解释文档的方式。@DroidOS这将是.prevAllselector.first的行为:
 <p id='select_me'>Div
    <p id='select_me_now'>paragraph</p>
</p>
$( "li.item-a" ).closest( "ul" ).css( "background-color", "red" );