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