使用JQuery来计算匹配的html表条目

时间:2014-03-05 22:52:48

标签: jquery

我有日志文件数据,我想使用jQuery来计算每个“站点”有多少条目。此外,我想做一些事情(可能改变背景颜色)有多个条目的网站:

<tr><td class='site'>123456</td><td>70</td><td>10.32</td><td>2014-03-04</td></tr>
<tr><td class='site'>123457</td><td>73</td><td>8.95</td><td>2014-03-03</td></tr>
<tr><td class='site'>123458</td><td>61</td><td>1.37</td><td>2014-03-05</td></tr>
<tr><td class='site'>123457</td><td>68</td><td>12.26</td><td>2014-03-04</td></tr>
<tr><td class='site'>123457</td><td>95</td><td>15.31</td><td>2014-03-05</td></tr>
<tr><td class='site'>123456</td><td>58</td><td>1.31</td><td>2014-03-05</td></tr>
<tr><td class='site'>123459</td><td>65</td><td>11.06</td><td>2014-03-05</td></tr>

所以,从上面的html中,我会将以下总数放入div:

Site    Issues
123456    2
123457    3
123458    1
123459    1

...我会突出显示表中有多个条目(123456和123457)的两个站点。你能指出我正确的方向吗?

P.S。我已经在使用“tablesorter”对行进行排序。非常方便的插件!

3 个答案:

答案 0 :(得分:2)

var totals = {};
$("td.site").each(function() {
    var site = $(this).text();
    if (totals[site]) {
        totals[site]++;
    } else {
        totals[site] = 1;
    }
}

现在,对象totals包含您想要的计数。

答案 1 :(得分:1)

以下是您可以采用的方法之一。 Jsbin Demo

var result = {};

$('.site').each(function(index, element) {
  var $el = $(element);
  var site = $el.html();
  result[site] = result[site] || 0;
  result[site]++; 

  //To highlight sites with multiple issues
  if (result[site] > 1) {
    $el.css({background: 'green'}); //Or something else
  } 
});

console.log(result);

<强>更新

对于@Eduardo抓住的一个角落案件,他在评论中也提出了修正案。 我们应该使用它来突出显示元素,否则我们将错过选择多个条目中的第一个元素。

$('.site:contains('+site+')').css({'color': 'green'}); //Or something else

答案 2 :(得分:1)

var sites = [];
var rows = $("tr");
for(var i in rows){
    var site = $("td.site", rows[i]).text();
    // if I've already saved this site, i go to the next one
    if(sites[site])continue;

    // i get how many times the site is repeated
    var count = $("td:contains('"+site+"')").length;

    // save result in an array
    sites[site] = count;
    // or display the result somehow
}