添加徽章总数

时间:2015-01-30 17:57:20

标签: jquery

我有一个包含多个部分的页面。每个部分都包含一个徽章,显示某些项目的总计数。

<span class="badge">4</span>

我需要能够判断页面上的所有徽章是否都为零。我应该循环并将它们全部添加起来以查看总数是否结束&#34; 0&#34;?

var cnt = 0;

$('.badge').each(function() {   
   cnt = cnt + $(this).val;
});

if (cnt > 0) {
   // more than 0
}

看起来效率不高......必须有更好的方法。

3 个答案:

答案 0 :(得分:3)

一种方法是获取您正在测试的所有元素,然后过滤该集合以移除那些非零的元素并比较两组的长度;总结似乎没必要:

var badges = $('.badge'),
    zeroBadges = badges.filter(function(){
        return parseInt(this.textContent, 10) === 0;
    }),
    allAreZero = badges.length === zeroBadges; // true/false

或者您可以使用Array.prototype.every()

var allAreZero = $('.badge').get().every(function (el){
        return parseInt(el.textContent, 10) === 0;
    }); // true/false

或者,在纯JavaScript中采用相同的方法:

var badges = document.querySelectorAll('.badge'),
    allAreZero = Array.prototype.every.call(badges, function (el) {
        return parseInt(el.textContent, 10) === 0;
    });

参考文献:

答案 1 :(得分:1)

不是将它们全部添加,而是可以循环遍历它们并测试每个值以查看值是否为零。如果您发现非零徽章值,则可以停止测试并做出反应。

或者,您可以在输出值时为徽章指定其他类,具体取决于它们是否为零。像这样:

<span class="badge badge-zero">0</span>
<span class="badge badge-nonzero">4</span>

然后,您可以通过选择一组非零徽章让jQuery为您完成工作:

if($("span.badge.badge-nonzero").length > 0){
    //You have some non-zero badges, do something
}

答案 2 :(得分:0)

我建议您使用.html(),除非您在范围内有其他html内容。

var cnt = 0;

$('.badge').each(function() {
   var badge = $(this).html();
   cnt = cnt + parseInt(badge);
});

if (cnt > 0) {
   // more than 0
}