1

.each()を使用せず、JQueryセレクターのみを使用してこれらの両方を作成するにはどうすればよいですか?

var xxxx = 0;
$('.clonedInput').each(function(index) {
    if($(this).children().filter(':checked').length == 2)
    xxxx++;
});


var num_normal_foods = 0;
$('[id^="amount_"]').each(function(index) {
    if($(this).val() == '30.00')
    num_normal_foods++;
});
4

2 に答える 2

3

jQuery のセレクションには .length プロパティがあります。

var len = $('.clonedInput :checked').length;
var len2 = $('[id^="amount_"][value="30.00"]').length;

最初のクエリは、任意の .clonedInput クラスのチェックされたすべての子を返し、それらをカウントします。

2 番目のクエリは、amount_ で始まり、値が「30.00」であるすべての ID を検索します。(プロパティ クエリは [][] のように連鎖できます)

編集: @Blazemongerを満たすために

任意のタイプの要素の値を取得するには (値は一部で機能します)、これを使用します。

var len2 = $('[id^="amount_"]').filter(function() {
  return $(this).val() == "30.00";
}).length;

だめだから二重編集

var len = $('.clonedInput').filter(function(){
   return $(this).children(':checked').length == 2;
}).length;
于 2012-07-19T13:30:00.163 に答える
3

これを 1 歩ずつ進めていきましょう。

あなたは以下から始めました:

var xxxx = 0;
$('.clonedInput').each(function(index) {
    if($(this).children().filter(':checked').length == 2)
    xxxx++;
});

filter私には、これは単に要素のコレクションを試みて.clonedInput、フィルターに一致する数を見つけようとしているように見えます:

var xxxx;
function hasTwoCheckedChildren(i) {
    return $(this).children(':checked').length == 2;
}
xxxx = $('.clonedInput').filter(hasTwoCheckedChildren).length;

に続く:

var num_normal_foods = 0;
$('[id^="amount_"]').each(function(index) {
    if($(this).val() == '30.00')
    num_normal_foods++;
});

繰り返しますが、これは私にはフィルタリング機能のように見えます:

var num_normal_foods;
function valueIsThirty(i) {
    return +$(this).val() === 30;
}
num_normal_foods = $('[id^="amount_"]').filter(valueIsThirty).length;

最終的に重要なのは、コードが意図したとおりに動作することです。あなたが書いたコードがあなた.eachが望むことをするなら、それを変更する必要はありません。とにかく裏でfilter使う。each

于 2012-07-19T13:35:41.800 に答える