jQuery组元素按名称计数

时间:2014-01-30 15:48:58

标签: jquery list sorting count

我有一个来自数据库的大型名称列表,我想过滤并计算特定名称值 - 在本例中为“匿名”。

例如:

<ul>
    <li>Johnny Ace</li>
    <li>Mary Adams</li>
    <li>Bob Allen</li>
    <li>Anonymous</li>
    <li>Anonymous</li>
    <li>Anonymous</li>
    <li>Anonymous</li>
    <li>Anonymous</li>
    <li>David Brown</li>
    <li>Sue Smith</li>
    <li>John Williams</li>
</ul>

我希望结果是:

<ul>
    <li>Johnny Ace</li>
    <li>Mary Adams</li>
    <li>Bob Allen</li>
    <li>Anonymous (5)</li>
    <li>David Brown</li>
    <li>Sue Smith</li>
    <li>John Williams</li>
</ul>

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

使用:contains()来获取长度并删除除第一个之外的所有内容,然后设置文本

var count=$('ul li:contains("Anonymous")').length;
$('ul li:contains("Anonymous")').not(':first').remove().end().text("Anonymous("+count+")");

DEMO

答案 1 :(得分:0)

循环可能也很容易,适用于所有元素:

http://jsfiddle.net/N6wSf/16/

var categories = {},
    category;
$('ul li').each(function(i, el){
    category = $(el).text();
    if (categories.hasOwnProperty(category)) {
        categories[category] += 1;
    } else {
        categories[category] = 1;
    }
});

$('ul').empty();
// print results
for(var key in categories){
    $('ul').append('<li>' + key + ' (' + categories[key] + ')</li>');
}