Сканирование DOM вверх, чтобы найти селектор соответствия элемента (без jQuery) - PullRequest
0 голосов
/ 13 ноября 2018

Я хотел функцию, которая могла бы сканировать DOM вверх от DOMElement, а также сканировать дочерние элементы каждого родителя по мере его роста.

Это должно было продолжаться до тех пор, пока не будет найдено любое <element>, соответствующее селектору, полученному в параметре. Селектор должен быть любого типа действительного селектора CSS.

Это также нужно было сделать в чистом JS (без jQuery)

1 Ответ

0 голосов
/ 13 ноября 2018

В итоге я создал модифицированную версию этой функции, которую я нашел на этом сайте . Вы можете использовать эту функцию по своему желанию, масштабировать ее, заявить, что она ваша, и все, что вы захотите.

Вот решение, которое я нашел

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;

};
...