jQuery选择祖先

时间:2010-02-04 15:19:59

标签: jquery jquery-selectors ancestor

是否可以使用jQuery选择元素的祖先?

标记:

<div id="ancestor-1">
    <div>
        <a href="#" class="click-me">Click me</a>
    </div>
</div>
<div id="ancestor-2">
    <div>
        <a href="#" class="click-me">Click me</a>
    </div>
</div>

脚本:

$(".click-me").click(function(){
    // var ancestorId = ???;
    alert(ancestorId)
});

6 个答案:

答案 0 :(得分:43)

尝试parent()作为直接的父元素。

$(".click-me").click(function() {
  var ancestor = $(this).parent();
  alert(ancestor)
});
所有匹配的祖先元素

parents()

$(".click-me").click(function() {
  var ancestors = $(this).parents(".some-ancestor");
  alert(ancestors)
});

closest()代表第一个最接近的匹配元素(祖先或自我)。

$(".click-me").click(function() {
  var ancestor = $(this).closest(".some-ancestor");
  alert(ancestor)
});

parents()closest()之间的差异很微妙但很重要。 closest()将返回当前元素(如果匹配); parents()仅返回祖先。你们许多人不希望有可能返回当前元素。 closest()也只返回一个元素; parents()返回所有匹配的元素。

答案 1 :(得分:11)

你的意思是这样的吗?

$('.click-me').click(function() {
    var $theAncestor = $(this).closest('#ancestor-1');
}

这将搜索所有祖先,直到找到匹配为止。

http://api.jquery.com/closest/

修改

杰罗姆,您的问题可以通过多种方式解释。这说明了jQuery的强大功能和灵活性。

请考虑以下事项。

首先,回答你的问题,是的,可以使用jQuery来选择元素的祖先。

我认为我们可以假设你知道jQuery能够通过以下方式选择任何元素,无论是祖先还是后代:

$('#myElement')

鉴于click-me示例,如果您想要返回所有元素的祖先集合,请使用:

$(this).parents()

$(this).parents(selector)

但请注意,这将遍历返回所有的所有祖先,或者在给出选择器时匹配所有匹配。

如果您希望返回直接父级,请使用:

$(this).parent()

如果你知道你需要哪个祖先,请使用:

$(this).closest(selector)

但请注意,它只会返回第一个匹配项,如果当前元素(this)匹配,它将返回该匹配项。

我希望这会有所帮助。

答案 2 :(得分:2)

尝试组合使用parents()或nearest(),或者使用选择器来确定哪个祖先应该匹配。例如,找到最近的具有id的祖先div。

$('.click-me').click( function() {
      var ancestorId = $(this).closest('div[id]');
      alert(ancestorId);
});

答案 3 :(得分:0)

您在寻找parent()吗?父选择器jQuery Doc。如果您的方案有所不同,请说明您的预期输出是什么。

答案 4 :(得分:0)

http://api.jquery.com/parent/http://api.jquery.com/parents/

$(".click-me").click(function(){
    var ancestorId = $(this).parent().parent();
    alert(ancestorId)
});

会返回带有ids

的div

答案 5 :(得分:0)

这取决于你想要实现的目标。您想搜索所有祖先,无论使用哪个类?或者你想搜索祖先的所有元素并具有某些类(在你的情况下是祖先-x)?

如果你想循环通过任何祖先,只需使用.parent()(这是一个很好的例子,如何循环遍历所有元素)或.parents()你可以使用如下:

$(".click-me").click(function(){
    var parentElements = $(this).parents().map(function () {
        return this.tagName;
    })
    // whatever else you want to do with it
});

可能最好的方法是使用.parents(),直到找到具有某个id或class的元素。这实际上取决于你想做什么。