jQuery中最近的祖先节点

Pie*_*igi 14 javascript jquery dom

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

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

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

nic*_*ckf 20

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


是的 - parents()遍历树.

<div id="a">
    <div id="b">
        <p id="c">
            <a id="d"></a>
        </p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

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

  • 幸运的是,jQuery团队从那时起就用`wontfix`关闭了这张票.所以.parents()应该再次被认为是稳定的. (4认同)
  • 请注意,John Resig计划更改.parents()以按源顺序返回元素.在论坛帖子围绕返回集合中的元素顺序转换后,请参阅John自己提交的这个错误:http://bugs.jquery.com/ticket/5994 (2认同)

Bor*_*gar 16

加入@ nickf的答案:

jQuery 1.3简化了这个任务closest.

鉴于DOM:

<div id="a">
    <div id="b">
        <p id="c">
            <a id="d"></a>
        </p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

你可以做:

$('#d').closest("div"); // returns [ div#b ]
Run Code Online (Sandbox Code Playgroud)

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