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

Javascript 向上扫描DOM以查找元素匹配选择器(无jQuery),javascript,html,dom,css-selectors,Javascript,Html,Dom,Css Selectors,我想要一个函数,它可以从domeElement向上扫描DOM,并在DOM向上扫描每个父级的子级 它必须继续运行,直到找到任何与参数中接收到的选择器匹配的。选择器必须是任何类型的有效CSS选择器 这也需要在纯JS中完成(无jQuery)我最终制作了这个函数的修改版本。你可以随心所欲地使用这个函数,放大它,把它据为己有,无论你想要什么 这是我找到的解决办法 这确实不是一个正确的问题。这实际上只是一个没有特定代码相关问题的目标statement@BramVanroy:querySelector/All

我想要一个函数,它可以从
domeElement
向上扫描DOM,并在DOM向上扫描每个父级的子级

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


这也需要在纯JS中完成(无jQuery)

我最终制作了这个函数的修改版本。你可以随心所欲地使用这个函数,放大它,把它据为己有,无论你想要什么

这是我找到的解决办法
这确实不是一个正确的问题。这实际上只是一个没有特定代码相关问题的目标statement@BramVanroy:querySelector/All不能匹配元素的祖先。我现在意识到OP只关注祖先的孩子,而不是他们的后代。(这很有意义——否则您可以在根目录上执行querySelector。)
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;

};