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

IT技术 javascript parent selectors-api
2021-02-21 09:33:02

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

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

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

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

1个回答

您会想要使用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;
}

用途:返回一个“父母”数组

// 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') );