jQuery - 是否有比“parent().parent().parent()”更好的语法?

发布于 2024-12-05 03:49:48 字数 157 浏览 0 评论 0 原文

我正在做一些非常基本的 jQuery 东西,真正开始,并且我经常通过做一些事情来导航 dom,就像

$(this).parent().parent().addClass('hello');

我只是想知道是否有更好的方法来做到这一点?

I'm doing some quite rudimentary jQuery stuff, getting started really, and I'm frequently navigating up the dom by doing things like

$(this).parent().parent().addClass('hello');

I was just wondering if there's a nicer way to do this?

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

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

发布评论

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

评论(5

看透却不说透 2024-12-12 03:49:48

您可以使用 parents ,它依次返回所有祖先元素。如果想在特定级别停止遍历,可以使用eq进行过滤由此产生的集合。例如,要获取祖父母:

// 0 = parent, 1 = parent of parent, etc.
$(this).parents().eq(1).addClass('hello');

如果您想向上遍历树并且不在特定级别停止,而是在特定选择器匹配处停止,请使用 最接近,例如:

$(this).closest("table").addClass('hello');

You can use parents, which returns all ancestor elements in turn. If you want to stop traversing at a particular level, use eq to filter the resulting collection. For example, to get the grandparent:

// 0 = parent, 1 = parent of parent, etc.
$(this).parents().eq(1).addClass('hello');

If you want to go upwards through the tree and stop not at a particular level, but at a particular selector match, use closest instead, e.g.:

$(this).closest("table").addClass('hello');
ˉ厌 2024-12-12 03:49:48

假设您有以下 HTML:

<div>
    <span>
        <strong>Hi there</strong>
    </span>
</div>

您可以只使用 .parents()获取 div 元素:

$("strong").parents("div").addClass("hello");

只需将 "strong" 替换为 this,您就可以使用选择器来查找特定的父元素。

Say you have the following HTML:

<div>
    <span>
        <strong>Hi there</strong>
    </span>
</div>

You could just use .parents() to get the div element:

$("strong").parents("div").addClass("hello");

Simply replace "strong" with this and you can use a selector to find a specific parent element.

掩耳倾听 2024-12-12 03:49:48

您可以使用 closest() 方法,该方法返回第一个匹配的元素祖先链中给定的选择器。

$(this).closest(SELECTOR_OF_THE_PARENT).addClass('hello')

You can use the closest() method, which returns the first element that matches the given selector in the ancestor chain.

$(this).closest(SELECTOR_OF_THE_PARENT).addClass('hello')
墨小墨 2024-12-12 03:49:48

听起来像是您的 .parents().closest() 之后 - 后者是最有效的,因为一旦它匹配最接近的选择器,它就会停止在 DOM 上前进。

Sounds like your after .parents() or .closest() -- the latter being the most efficient, as it stops progressing up the DOM once it matches the closest selector.

黯然#的苍凉 2024-12-12 03:49:48

“我只是想知道是否有更好的方法来做到这一点?”

熟悉 jQuery 的选择和遍历方法绝对是个好主意。

然而,如果将来你发现自己被遍历淹没并发现:

  1. 你的“数据模型”实际上包含在你的 DOM 中
  2. 维护和更改这种性质的应用程序是非常痛苦的

......可能是时候考虑正式的 模型-查看方法

"I was just wondering if there's a nicer way to do this?"

It's definitely a great idea to be intimately familiar with jQuery's selection and traversal methods.

However, if in the future you find yourself overwhelmed by traversal and discover:

  1. That your "data model" is actually contained in your DOM
  2. Maintaining and changing applications of this nature is very painful

...it might be time to consider a formal model-view approach.

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