2012-02-23 2 views
2

を各階層を処理する親の各階層を処理する方法はinidividuallyjQueryの両親() - 私はいくつかの要素に一致するクラスを持っている場合は、別途

$(".myWidespreadClass").parents() // [immediateParent1, immediateParent2, deeperAncestor1, deeperAncestor2] 

私のようなものを実行できるようにしたいと思いがあります。最初の反復が直系の親を越え、次の反復が次のレベルの深い先祖に及ぶ...

+0

'parent()'を使った再帰関数ですか? – jgauffin

+0

あなたは、親を再帰的に反復することを意味しますか? – redShadow

+0

parentsUntil関数をチェックアウトしてください:https://api.jquery.com/parentsUntil/ –

答えて

5

魅惑的な質問。 |

var parents = $(".myWidespreadClass").parent(); // Not plural! 
while (parents[0]) { 
    // Process them, e.g. 
    parents.each(function() { /* ... */ }); 

    // Get the next tier 
    parents = parents.parent(); // Not plural! 
} 

Live example:私はあなたがこのようなループ、何かをしたいと思いますLive source -

while (parents[0] && parents[0].nodeName !== "BODY") { 

あなたは少し早くそれよりも終了する場合があり、早期終了する可能性が更新が、以下を参照してください、例えば:...あなたのニーズに応じて。私はこの例でやった。以下を参照してください。

更新は実際に、あなたは、代わりにこのような何かの両親を処理しているとき、おそらく、フィルタリングほう早期終了と注意する必要があります:

Live exampleを| Live source

var parents = $(".myWidespreadClass").parent(); 
while (parents[0]) { 
    // Process them, e.g. 
    parents.each(function() { 
     if ($.contains(document.body, this)) { 
      // This one is under `body`, process it 
      display("Visiting " + this.nodeName + "." + this.className); 
     } 
    }); 

    // Get the next tier 
    parents = parents.parent(); // Not plural! 
} 

要素のあなたの最初のセットは、DOMで乱暴に異なるレベルにあってもよい、とあなたはすぐに他の人よりも、それらのいくつかのための最上位の要素に達するだろうということで理由。上記のbodyのチェックはあなたのニーズに適していないかもしれませんが、あなたはそのアイデアを得るでしょう。

+0

+1真剣に痩せています。おめでとう100Kマークを得ることに:) – Sarfraz

+0

@Sarfraz:ありがとう! –

+0

あなたはこれで私を打つ:) btw、なぜあなたは条件として両親[0]を使いましたか?再帰関数のようなものではないでしょうか?とにかく、+1 – redShadow

関連する問題