jQuery:确定 jQuery 对象是否是根 html 标签

发布于 2024-09-16 23:05:39 字数 404 浏览 8 评论 0原文

假设我正在编写一个 jQuery 扩展方法。此方法应攀爬元素的祖先树,直到到达文档的根 标记,此时应停止。我已经实现了如下所示:

$.fn.foo = function() {

    var $foo = this;

    while($foo[0] !== $(document).children()[0]) {
        // do stuff with $foo
        $foo = $foo.parent();
    }

    // do stuff

};

我的问题是:有没有比 $foo[0] !== $(document).children()[0] 更好的方法来知道我是否'已经到达根 标记了吗?

Let's say I'm writing a jQuery extension method. This method should climb the ancestor tree of an element until it reaches the document's root <html> tag, at which point it should stop. I've implemented this as shown here:

$.fn.foo = function() {

    var $foo = this;

    while($foo[0] !== $(document).children()[0]) {
        // do stuff with $foo
        $foo = $foo.parent();
    }

    // do stuff

};

My question is: is there a better way than $foo[0] !== $(document).children()[0] to know whether I've reached the root <html> tag?

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

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

发布评论

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

评论(4

夏至、离别 2024-09-23 23:05:39
$foo.is('html')

不过,您似乎正在重新实现 parents()

$foo.is('html')

You seem to be reimplementing parents(), though.

找回味觉 2024-09-23 23:05:39

不要与第一个孩子进行比较,只需查看是否返回了父母:

var $foo = $(this);

while($foo.parent().length > 0) {
    // do stuff with $foo
    $foo = $foo.parent();
}

这是一个工作小提琴

Don't compare against the first child, just see if a parent is returned:

var $foo = $(this);

while($foo.parent().length > 0) {
    // do stuff with $foo
    $foo = $foo.parent();
}

Here's a working fiddle.

您的好友蓝忘机已上羡 2024-09-23 23:05:39

这又如何呢?

$.fn.foo = function() {

    var $foo = this;

    while($foo[0].tagName != 'HTML') {
        // do stuff with $foo
        $foo = $foo.parent();
    }

    // do stuff

};

或者,如果您实际上不需要向上遍历,而只想对给定节点的所有祖先执行操作,则可以使用 .parents() ,如下所示:

$.fn.foo = function() {

    var $foo = this;

    $foo.parents().andSelf().each(function() {
        // do stuff with $foo
    });

    // do stuff

};

What about this?

$.fn.foo = function() {

    var $foo = this;

    while($foo[0].tagName != 'HTML') {
        // do stuff with $foo
        $foo = $foo.parent();
    }

    // do stuff

};

Alternatively, if you don't actually need to traverse up, but only want to do things to all ancestors of a given node, you could use .parents() like so:

$.fn.foo = function() {

    var $foo = this;

    $foo.parents().andSelf().each(function() {
        // do stuff with $foo
    });

    // do stuff

};
柠檬 2024-09-23 23:05:39

这应该停止在 HTML 处。

​$foo.parents().andSelf().each(function() {
    // do something
    console.log(this.nodeName);
});​​​

或者,如果您对每个节点运行相同的 jQuery 方法,请执行以下操作:

$foo.parents().andSelf().someJQueryMethod();

This should stop at HTML.

​$foo.parents().andSelf().each(function() {
    // do something
    console.log(this.nodeName);
});​​​

Or if you're running the same jQuery method(s) against each node, do this:

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