Jquery匹配查询的长度

时间:2012-07-19 13:25:47

标签: javascript jquery

如果不使用.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++;
});

2 个答案:

答案 0 :(得分:3)

jQuery选择具有.length属性:

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

第一个查询返回任何.clonedInput类的所有已检查子项,然后对它们进行计数。

第二个查询找到以amount_开头并且值为“30.00”的所有id。 (属性查询可以链接为[] [])

编辑以满足@Blazemonger

获取任何类型元素的值(值适用于某些元素),请使用:

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

Double EDIT 因为我没用

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

答案 1 :(得分:3)

让我们一步一步。

您开始时:

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