jQuery循环与累积逻辑?

时间:2012-08-14 00:38:44

标签: jquery

当你想使用某些累积结果时,如何循环遍历jQuery中的children()或each()调用的结果?例如,在复选框中总结数字,如果超过100%则更改类。所有示例似乎只执行每次迭代独立的逻辑。

我正在寻找这个c#

的javascript / jquery等价物
var x = new List<int> { 1, 2, 3 };
Console.WriteLine(x.All(y => y > 0));

这就是我现在所拥有的,但似乎应该有更清洁的东西。

var count = 0;
$(this).parent().children().each(
    function () {
        if ($(this).hasClass("selected")) {
            count++;
        }
    }
);

if ($(this).parent().children().length == count) {
    $(this).parent().parent().toggleClass("selected");
}
else {
    $(this).parent().parent().removeClass("selected");
}

4 个答案:

答案 0 :(得分:3)

好吧,Javascript / Jquery不是SQL,没有定义的“累积”/分组操作概念。此外,“累积逻辑”是一个相当含糊的术语,它实际上取决于您想要执行的特定任务。

因此,您的总和示例可以在外部变量的帮助下针对each()进行调整,适用于input /文本标记:

var sum = 0;
var objects = $("input.myclass");
objects.each(function() {sum+=Number($(this).val());});
if (sum>100) objects.addClass("anotherclass");

对于复选框:我不确定“复选框中的总数”是什么意思,你的意思是值吗?

答案 1 :(得分:2)

除了明显的迭代和求和方法之外,您还可以使用较新的javascript迭代函数。假设你想要总结一些数字:

var sum = objects
    //convert to jquery selection of numbers
    .map(function() {return +$(this).val(); })
    //convert to javascript array
    .get() 
    //add together
    .reduce(function(a, b) { return a + b; });

对于你的例子:

var checkboxes = $(this).parent().children()
var allSelected = checkboxes.map(function () {
    return $(this).hasClass("selected");
}).get().every(function(x) { return x; });

通过扩展jQuery

可以更好地完成一个阶段
$.fn.every = function(f) {
    return [].every.call(this, function(x) {
        return f.call(x);
    });
}

离开你:

var checkboxes = $(this).parent().children()
var allSelected = checkboxes.every(function() {
    return $(this).hasClass("selected");
});

答案 2 :(得分:1)

与线性数组操作mapfilter不同,jQuery没有针对它的polyfill,但我认为你要找的是Array.reduce。它在较新的浏览器中得到了很好的支持。

您可以使用boolean toggleClass语法实现您的javascript。

var count = $(this).parent().children(".selected").length;
$(this).parent().parent().toggleClass("selected",
    $(this).parent().children().length === count);

答案 3 :(得分:0)

这并不难。我不确定这是否会100%有效,但它会告诉你如何做累积逻辑

var score = 0;
$("#checkboxDivId input[type=checkbox]:checked").each(function()
{
    score += $(this).val();
});
if(score >= 100)
{
    //Put your code here
}

显然,只有当你的分数是复选框的value属性,并且选择器是否正确(不能100%确定选择器是否正确)时,这才有效。