当你想使用某些累积结果时,如何循环遍历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");
}
答案 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)
与线性数组操作map
和filter
不同,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%确定选择器是否正确)时,这才有效。