Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery parents()-分别处理每一层_Javascript_Jquery_Parent - Fatal编程技术网

Javascript jQuery parents()-分别处理每一层

Javascript jQuery parents()-分别处理每一层,javascript,jquery,parent,Javascript,Jquery,Parent,当我有一个匹配多个元素的类时,有没有一种方法可以单独处理父类的每一层 $(".myWidespreadClass").parents() // [immediateParent1, immediateParent2, deeperAncestor1, deeperAncestor2] 我希望能够运行这样的东西。但第一次迭代运行在直接父代上,第二次迭代运行在下一个级别的更深层祖先上,等等。有趣的问题。我想你需要一个循环,像这样: var parents = $(".myWidespreadCla

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

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

我希望能够运行这样的东西。但第一次迭代运行在直接父代上,第二次迭代运行在下一个级别的更深层祖先上,等等。

有趣的问题。我想你需要一个循环,像这样:

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!
}
|-更新,但见下文,可能提前终止

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

while (parents[0] && parents[0].nodeName !== "BODY") {
…取决于你的需要。我在例子中是这样做的。见下文

更新实际上,您必须小心提前终止,可能最好在处理父级时进行过滤,如下所示:

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


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

使用父对象的递归函数?您的意思是,递归地迭代父对象?检查父对象直到函数:您在这一点上击败了我:顺便问一下,您为什么使用父对象[0]作为条件?像递归函数这样的东西不是更好吗?不管怎样+1@redShadow:我使用家长[0]来保持循环,原因与您使用的原因大致相同!元素终止递归函数。:-干得不错。递归在这里是不必要的,所以我不会说它更好,但它也同样有效。干杯-很好的答案。但是DOM中不同级别的元素的另一个困难是,使用父元素最多只能处理一次每个元素,但是使用父元素+迭代器方法可以多次处理某些元素。。。与您的方法相比,没有在所有情况下都很好地定义层的问题更大。我可能会尝试将其开发成一个插件,该插件接受一个参数,指定如果元素已经被处理,是否应该忽略它们once@wheresrhys字体啊,是的,皱纹很好。维护一系列您访问过的应用程序可能很容易,但非常有意义。