向上扫描DOM以查找元素匹配选择器(无jQuery)

时间:2018-11-13 16:59:57

标签: javascript html dom css-selectors

我想要一个函数,该函数可以从DOMElement向上扫描DOM,还可以在上升时扫描每个父级的子级。

它必须继续前进,直到找到与参数中接收到的选择器匹配的任何<element>。选择器必须是任何类型的有效CSS选择器。

还需要使用纯JS(无jQuery)完成

1 个答案:

答案 0 :(得分:0)

我最终制作了该功能的修订版I found on this site。您可以根据需要使用此功能,按比例放大,自己索取它。

这是我找到的解决方法

GetClosest = function (elem, selector) {

    for (; elem && elem !== document.body; elem = elem.parentNode) {

        // If the elem matches at first iteration.
        if(elem.matches(selector)) {

            return elem;

        } else {

            // Scans all the childs of current iterated element (always higher in DOM until found).
            // If one matches the selector it'll stop and return it.
            child = elem.parentNode.firstChild;
            do {

                if(child.nodeType === 3) continue; // text node
                if(child.matches(selector)) return child;

            } while (child = child.nextElementSibling);
        }
    }

    return null;

};