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