.parents() без jquery - или querySelectorAll для родителей

Возможный дубликат:
Проверить event.target.parentElement с matchSelector js

У меня есть объект dom, я бы хотел сопоставить его родителей, всех родителей, с селектором, например querySelectAll(), но для родителей, а не для детей. Подобно jQuery.parents('selector'), но мне НЕ нужна совместимость с задним числом. Кроме того, никакие библиотеки, пожалуйста. Я буду totes взять возвращаемое значение boolean.

Я могу записать это как рекурсивную функцию/для/, используя matchesSelector(). Я ищу малоизвестные методы или более эффективный код.

Сохранение любой обработки стоит того. Думайте десятки тысяч проверок матча или даже более.

Ответ 1

Просто потому, что я хороший парень! В будущем всегда убедитесь, что у вас есть код в вашем вопросе, или они скорее всего будут закрыты/опущены:/

Но вы бы хотели использовать цикл while(), так как мы не знаем точное количество родителей, которые у нас есть

jsFiddle Demo

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