jQuery 选择祖先

发布于 2024-08-20 02:48:49 字数 465 浏览 6 评论 0原文

是否可以使用 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)
});

Is is possible to use jQuery to select an ancestor of an element?

Markup:

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

Script:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

稍尽春風 2024-08-27 02:48:49

尝试 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() 返回所有匹配的元素。

Try parent() for the immediate parent element.

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

Or parents() for all matching ancestor elements.

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

Or closest() for the first closest matching element (either an ancestor or self).

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

The difference between parents() and closest() is subtle but important. closest() will return the current element if it's a match; parents() returns only ancestors. You many not want the possibility of returning the current element. closest() also only returns one element; parents() returns all matching elements.

暗地喜欢 2024-08-27 02:48:49

你的意思是这样的吗?

$('.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)

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

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

$(this).parent()

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

$(this).closest(selector)

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

我希望这有帮助。

You mean something like this?

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

This will search through all ancestors until a match is found.

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

EDIT:

Jerome, your question can be interpreted several ways. This speaks to the power and flexibility of jQuery.

Please consider the following.

First, to answer your question, yes, it is possible to use jQuery to select an ancestor of an element.

I think we can assume that you are aware of jQuery's ability to select any element, whether ancestor or descendant via:

$('#myElement')

Given the click-me example, if you would like to have a set of all of an element's ancestors returned, use:

$(this).parents()

or

$(this).parents(selector)

But be aware that this will traverse through ALL ancestors returning all, or all that match when a selector is given.

If you would like to have the immediate parent returned, use:

$(this).parent()

If you know which ancestor you need, use:

$(this).closest(selector)

But be aware that it will only return the first match, and if the current element (this) is a match, it will return that.

I hope this helps.

日久见人心 2024-08-27 02:48:49

尝试结合使用parents()或closest(),也许与选择器结合使用来确定哪个祖先应该匹配。例如,查找具有 id 的最接近的祖先 div。

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

Try using parents() or closest() in combination, perhaps, with a selector to determine which ancestor should match. For example, find the closest ancestor div with an id.

$('.click-me').click( function() {
      var ancestorId = $(this).closest('div[id]');
      alert(ancestorId);
});
冷月断魂刀 2024-08-27 02:48:49

您在寻找 parent() 吗? jQuery Doc 用于父选择器。如果您的场景有所不同,请解释您的预期输出是什么。

Are you looking for parent()? jQuery Doc for parent selector. If it is different for your scenario explain what is your expected output.

昔梦 2024-08-27 02:48:49

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

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

将返回带有 id 的 div

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

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

would return the divs with the ids

知足的幸福 2024-08-27 02:48:49

这实际上取决于您想要实现的目标。您想搜索所有祖先,无论使用什么类别吗?或者您想搜索所有祖先元素并具有特定类别(在您的情况下为ancestor-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 或类的元素。这实际上取决于你想做什么。

It really depends what you want to achieve. Do you want to search for all ancestors regardless of class used? Or do you want to search for all elements that are ancestors and have certain class (ancestor-x in your case)?

If you want to cycle through any ancestors, simply use .parent() (there's an excellent example how to cycle through all elements) or .parents() which can you use like:

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

Probably the best approach would be to use .parents() until you get to element with certain id or class. It really depends on what you want to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文