18

重複の可能性:
matchesSelector jsでevent.target.parentElementを確認してください

私は dom オブジェクトを持っています。その親、すべての親を のようなセレクターと照合したいのですquerySelectAll()が、子ではなく親に対してです。jQuery の方法に似ていますが、下位.parents('selector')互換性は必要ありません。また、図書館はありません。トートはブール値の戻り値を取ります。

これを自分で再帰関数/for/while using として書くことができmatchesSelector()ます。あまり知られていない方法や、より効率的なコードを探しています。

処理を保存することは価値があります。何万もの一致チェック、またはそれ以上を考えてみてください。

4

1 に答える 1

42

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') );
于 2012-10-19T19:35:12.047 に答える