2011-12-14 5 views
1

の後にすべてのチェックボックスを取得したいと考えています。 このチェックボックスは異なるdivとテーブルにあります。 私が試した:あなたはDOM(test case)を登る必要があり深くネストされていても、特定の要素の後ろにあるすべての要素を取得

$('.available').click(function() { 
$(this).nextAll("input:checkbox").each(function() 
{ 
    //code 
}); 
}); 

おかげ

+1

マークアップの部分が多分? –

+0

その特定の要素 –

+0

サンプルHTMLを投稿できます – Pavan

答えて

6

$(this)           
    .parents().andSelf()       // get all parents of this as well 
    .nextAll().find('input:checkbox').andSelf() // get all siblings after and find any 
    .filter('input:checkbox');     // if real next sibling wasn't, kill it 

、これはかなりのパフォーマンス重いであることを心に留めておくようにしてください。あなたは以下のとおりです。

  1. は、同じ検索を複数回繰り返して、チェックボックスのためにそれぞれをダウン検索、
  2. その後(半多額の)すべての次の兄弟を取得し、それぞれの親のために(非常に高速)DOM
  3. を登ります子供にこれはjQueryの魔法ですが、間違いあり
  4. 最後に、残された非チェックボックスが(見つけもう一度設定を通過する必要があります)フィルタリング

ノードjQueryの容易さの外にあるより良い方法です。これはO(n^n)の複雑さ - 最悪の種類かもしれません。あなたの特定の要素がチェックボックスである場合、私は知らないが、そうでなければ、すべてのチェックボックスとあなたの要素を含むセットで開始する必要があると思います

+0

ありがとう!素晴らしい答え! – hhh3112

+0

ありがとう、助けてうれしい! –

+1

+1私はこの解決法を自分のものよりも好む。 –

0

var selector = ':checkbox, #target'; 

あなたは、インデックスを見つけることができますindex()を使用することにより、そのセットであなたの要素の:

var targetIx = $('#target').index(selector); 

そして、あなたはまた、そのインデックスの後にすべてのものにあなたのセットを減らすことができるであろう:

var elementsAfter = $(selector).slice(targetIx+1); 
0

nextAllは兄弟を取得し、そう...

最初のは、すべてのチェックボックスを取得できるようになる:、次の

var checkboxes = $("input:checkbox"); 

を私たちが望むものだけを格納する配列を準備します

var checkboxesslice = [];  

ここでループを繰り返して出発点を探しましょう:

これは完全にテストされていませんが、あなたはそのアイデアを得るでしょう。

関連する問題