我有日志文件数据,我想使用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”对行进行排序。非常方便的插件!
答案 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
}