jQuery parents() - 分别处理每个层

时间:2012-02-23 12:00:38

标签: javascript jquery parent

当我有一个匹配多个元素的类时,有一种方法可以单独处理每一层父母

$(".myWidespreadClass").parents() // [immediateParent1, immediateParent2, deeperAncestor1, deeperAncestor2]

我希望能够运行像.each()这样的东西,但是第一次迭代在直接父母身上运行,第二次迭代在下一级更深层次的祖先等...

1 个答案:

答案 0 :(得分:5)

引人入胜的问题。我想你会想要一个循环,就像这样:

var parents = $(".myWidespreadClass").parent(); // Not plural!
while (parents[0]) {
    // Process them, e.g.
    parents.each(function() { /* ... */ });

    // Get the next tier
    parents = parents.parent(); // Not plural!
}

Live example | Live source - 更新,但请参见下文,可能会提前终止

您可能希望提前终止一点,例如:

while (parents[0] && parents[0].nodeName !== "BODY") {

......取决于您的需求。我在示例中做了。见下文。

更新实际上,您必须小心提前终止,在您处理父母时可能会更好地过滤,例如:

Live example | Live source

var parents = $(".myWidespreadClass").parent();
while (parents[0]) {
    // Process them, e.g.
    parents.each(function() {
        if ($.contains(document.body, this)) {
            // This one is under `body`, process it
            display("Visiting " + this.nodeName + "." + this.className);
        }
    });

    // Get the next tier
    parents = parents.parent(); // Not plural!
}

原因是您的初始元素集可能在DOM中处于非常不同的级别,因此您将比其他元素更快地到达其中一些元素的最顶层元素。上面的body检查可能不适合您的需求,但您明白了。