2012-04-25 20 views
0

私は、選択したクラスを持つページに任意の数の要素を持っています。jQueryすべての要素にクラスがある場合

<div class="choice"></div> 
<div class="choice"></div> 

私は、彼らがなるので、それはdiv要素に行われるのクラスを追加し機能を実行します。

<div class="choice done"></div> 

この同じ関数内で、それは私がその後、どのように多くチェックするつもりだ実行されるたびにそれらの選択肢の中には、それらの上で行われたクラスがあり、それらがすべてそれを持つとき、私は別の機能を実行するつもりです。

これは私がこれまでにやっていることです:

function addDone(element) { 

$num = 0; 

$(element).addClass('done'); 

$('.choice').each(function() { 
    if($(this).hasClass('done')) { 
     $num + 1; 
    } 
}); 

if($num >= $('.choice').length) { 
    alert('all done...'); 
} 

} 

をしかし、それは、すぐに私は何の問題が何であるかのアイデアや優れたソリューションなので、正常に動作していない...関数を呼び出すと、アラートが実行されますこれをする?

注:実際のアプリケーションでは、それぞれの選択肢には、関数で使用されている要素変数の代わりになるものがあります。 choice持つ要素がないときに何かを

しかし、その場合にはdone

せずに、次は少しすっきりです:

+0

試してみてください 'alert( 'all done ...');' – kev

+0

これはちょっとタイプミスでした! – Cameron

+0

@Cameron '.done'と' .choice'の長さ比較を、 '.done'ごとに' .hasClass'を行うのではなく、どうしたらいいですか? ($( '。choice')。length == $( '。done')。length){アラート( 'All done'); } '。ラッパーの内部にある場合はより良いでしょう。 –

答えて

4

あなたはこれを言い換えることができ

if (!$(".choice").not(".done").length) { 
    alert("all done"); 
} 

Working Fiddle

+0

@gdoron true; –

1
if (!$(".choice:not(.done)").length) 
    // do your magic here. 
+1

'.choice:not(.choice)'は常に空のセットを返します。おそらく '.choice:not(.done)'を意味します。 –

+0

@SteveGreatrex。うん、私の履歴書には書きません... – gdoron

2
$num + 1; 

は、おそらく離れて他の人が示唆しているとして、より良い解決策があるかもしれないことから

$num = $num + 1; 

でなければなりません。