.parents() 没有 jquery - 或者为父母的 querySelectorAll [重复]

Posted

技术标签:

【中文标题】.parents() 没有 jquery - 或者为父母的 querySelectorAll [重复]【英文标题】:.parents() without jquery - or querySelectorAll for parents [duplicate] 【发布时间】:2012-10-10 11:01:21 【问题描述】:

可能重复:Check event.target.parentElement with matchesSelector js

我有一个 dom 对象,我想匹配它的父母,所有父母,与一个选择器,如querySelectAll(),但对于父母而不是孩子。类似于 jQuery 的 .parents('selector') 方法,但我不需要任何向后兼容性。另外,请不要图书馆。我将 totes 取一个布尔返回值。

我可以自己将其编写为递归函数/for/while 使用 matchesSelector()。我正在寻找鲜为人知的方法或更高效的代码。

保存任何处理都是值得的。想想数以万计的匹配检查,甚至更多。

【问题讨论】:

你自己写的代码在哪里? (以便人们可以帮助指出缺陷/添加改进) 这看起来与您之前询问的问题相同:***.com/questions/12977658/… @user1689607 哈!是的,看起来是这样......我在这里的想法略有不同。我忘记了 jQuery 的父母方法。唉...盯着同一个代码这么久我已经忘记了世界其他地方的存在... @mcpDESIGNS 我说我可以,但我没有。但我想`for()` @Pancho 因为他希望 所有 父母从选择器中 UP。我更新了答案以包含一个可选的第二个参数,您还可以在其中选择您希望它停止将父级添加到数组的位置。 :) 【参考方案1】:

您可能希望使用while() 循环,因为我们不知道我们拥有的确切父母数量

jsFiddle Demo

function getParents(el, parentSelector /* optional */) 

    // If no parentSelector defined will bubble up all the way to *document*
    if (parentSelector === undefined) 
        parentSelector = document;
    

    var parents = [];
    var p = el.parentNode;
    
    while (p !== parentSelector) 
        var o = p;
        parents.push(o);
        p = o.parentNode;
    
    parents.push(parentSelector); // Push that parentSelector you wanted to stop at
    
    return parents;

Useage:返回一个“父母”数组

// 2nd param optional, bubbles up to document
getParents( document.getElementById('me') ); 

// get all parents starting from -me- up to ID -outerParent-
getParents( document.getElementById('me'), document.getElementById('outerParent') );

【讨论】:

以上是关于.parents() 没有 jquery - 或者为父母的 querySelectorAll [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 获取节点

jQuery的节点选择

jQuery中的parent()和parents()有啥区别呢?

jQuery中的closest()和parents()的差别

jquery parents用法

jQuery $.parents() 无法正常运行