jQuery中最近的祖先节点

在我的javascript体验中,我发现这是一个非常常见的任务“搜索具有某些条件的元素的最近祖先(标记名称,类,…)”。 jquery的parents()方法可以完成这项工作吗? parent()的返回元素的顺序是可预测的吗? 从上到下还是从下到上? 目前我使用这个实用function:

function ancestor(elem, selector) { var $elem = $( elem ).parent(); while( $elem.size() > 0 ) { if( $elem.is( selector ) ) return $elem; else $elem = $elem.parent(); } return null; } 

有人能告诉我是否有聪明的方法来完成这项工作?

编辑 :自jQuery 1.3以来,它已被内置为closest()函数。 例如: $('#foo').closest('.bar');


是的 – 父母()遍历树。

 

$('#d').parents("div:first"); 将选择div b。

添加到@ nickf的答案:

jQuery 1.3用closest简化了这个任务。

鉴于DOM:

 

你可以做:

 $('#d').closest("div"); // returns [ div#b ] 

[ Closest返回一组]元素,其中包含与指定选择器匹配的最接近的父元素,包括起始元素。

你应该使用closest ,因为如果你使用多个元素, parents不会给你你期望的结果。 例如,假设你有这个:

  
test with nested divs.
another div.
yet another div.

并且您想要将一个类添加到具有元素作为其直接子元素的div(即1和3)。 如果你使用$('b').parents('div') ,你得到div 0,1和3.如果你使用$('b').parents('div:first') ,你只得到div 1要获得1和3,而不是0,你必须使用$('b').closest(elem)

nearest()从当前元素开始,如果您要查找的父项具有与当前相同的标记(例如,两者都是div),请使用parent()。nearest()