2011-12-20 6 views
2

私は、90の値と100を超えるアイテムを確認する要素のセットにjQueryフィルターを使用しています。私がやりたいことは、それらの条件に一致するアイテムの数を取得し、最終的に出力のために保存することですページの他の場所:一致した条件から返されたjQuery要素の数を取得する方法は?

$("#dtarget li").filter(function() 
{ 
    if (parseInt(this.innerText) < 90) 
    { 
     $(this).css("color","red"); 
    } 
    else if (parseInt(this.innerText) > 100) 
    { 
     $(this).css("color","gold"); 
    } 
}); 

私はjQueryとJavascriptを使い慣れていますので、簡単です。

+0

の可能複製[jQueryの - どのように私は、セレクタにより選択された要素の数を数えるのですか?](http://stackoverflow.com/questions/2686390/jquery-how-do-i-要素数を選択することによって選択された) –

答えて

1

http://api.jquery.com/length

あなたはそれが含まれているDOM要素の数を取得するにはjQueryオブジェクトに.lengthを呼び出すことができます。

//this will return a jQuery object with elements who's value is less than 90 
var less_than_90 = $("#dtarget li").filter(function() 
{ 
    var text = $(this).text(); 
    if (parseInt(text) < 90) 
    { 
     return true; 
    } 
    return false; 
}); 

//then you can get the number of DOM elements within the jQuery object created above 
var less_than_90_count = less_than_90.length; 

これは、100を超えるものについても同様に行うことができます。

this.innerTextの方が$(this).text()であることを忘れてしまいました。すでにjQueryを使用しているため、すべての機能を利用できます。ここで

はデモです:http://jsfiddle.net/acyZC/1/

+0

とにかく 'innerText'はすべてのブラウザで利用できません(Firefoxは' textContent'を使用しています)。 –

+0

良い点。私のコードをjqueryセレクタに変更しました。 – Psdpainter

0

おそらく、これは動作します:

var count = $("#dtarget li").filter(function() 
{ 
    if (parseInt(this.innerText) < 90) 
    { 
     return true; 
    } 
    else if (parseInt(this.innerText) > 100) 
    { 
     return true; 
    }else{ 
     return false; 
    } 
}).length; 

EDIT:returnが制限されたアイテムです。私が考えていたことは何でしょう。

+0

'return'はキーワードであるため、var returnは最適ではない可能性があります – asawilliams

0

私はちょうど私があなたが.filter()の目的を理解してないと思う各1

var redCounter = 0, 
    goldCounter = 0; 

$("#dtarget li").filter(function() { 
    if (parseInt(this.innerText) < 90) { 
     $(this).css("color","red"); 
     redCounter++; 
    } 
    else if (parseInt(this.innerText) > 100) { 
     $(this).css("color","gold"); 
     goldCounter++; 
    } 
}); 
0

するカウンタを追加します。これは、特定のjQueryオブジェクト内の項目の数を、いくつかの基準または関数に従って減らすために使用されます。関数をそのまま.filter(fn)の引数として使用している場合は、フィルタからtrueを返して要素を最終セットに含め、falseを返して削除します。あなたはどちらもしていません。

jQueryオブジェクトを繰り返し処理する場合は、.filter()ではなく.each()を使用してください。

お使いのjQueryオブジェクトの結果を保存するには、あなたはこのような変数に代入し、.each()を使用反復する:

var $targets = $("#dtarget li").each(function() 
{ 
    if (parseInt(this.innerText) < 90) 
    { 
     $(this).css("color","red"); 
    } 
    else if (parseInt(this.innerText) > 100) 
    { 
     $(this).css("color","gold"); 
    } 
}); 

あなたはその後、変数$ターゲットを使用して後で参照することができますし$ targets.lengthを持つjQueryオブジェクトの要素数を調べることができます。たとえば:

if ($targets.length > 1) { 
    $targets.css("padding-left", "10px"); 
} 
関連する問題