没有jquery的.parents() - 或者父母的querySelectorAll

Ran*_*all 13 javascript parents selectors-api

可能重复:
使用matchesSelector js检查event.target.parentElement

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

我可以自己写这个作为递归函数/ for/while使用matchesSelector().我正在寻找鲜为人知的方法或更有效的代码.

保存任何处理都是值得的.想想成千上万的匹配检查,甚至更多.

Mar*_*.io 34

只是因为我是一个好人!在将来,请务必确保您的问题中包含一些代码,否则它们很可能会被关闭/投票:/

但是你想要使用while()循环,因为我们不知道我们拥有的父母的确切数量

jsFiddle演示

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;
}
Run Code Online (Sandbox Code Playgroud)

用法:返回"父母"数组

// 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') );
Run Code Online (Sandbox Code Playgroud)