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()