Javascript 比较表中的单元格并将CSS类添加到其<;tr>;
我有一张有这么多行的桌子。它的结构就像这个代码Javascript 比较表中的单元格并将CSS类添加到其<;tr>;,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我有一张有这么多行的桌子。它的结构就像这个代码 <table border="1" cellpadding="1" cellspacing="1" style="width: 500px"> <tbody> <tr> <td>Name</td> <td>Criteria</td> <td>Grade</td>
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px">
<tbody>
<tr>
<td>Name</td>
<td>Criteria</td>
<td>Grade</td>
</tr>
<tr>
<td>Nick</td>
<td>5</td>
<td>5.75</td>
</tr>
<tr>
<td>David</td>
<td>3</td>
<td>11.5</td>
</tr>
</tbody>
</table>
请注意,我的目的是用CSS突出显示好结果行和坏结果行。我建议:
$('tbody tr').each(
function(){
var that = $(this),
criteria = parseInt(that.find('td:eq(1)').text(),10),
grade = parseInt(that.find('td:eq(2)').text(),10),
trClass = grade > criteria ? 'good' : 'notGood';
that.addClass(trClass);
});
注意选择器中的tbody
,为了防止它应用于第一行,我将该行移动到thead
元素中,因为它似乎是表的标题
请注意,在上述情况下,each()
严格来说是不必要的,因为addClass()
可以与函数一起使用:
$('tbody tr').addClass(function() {
var that = $(this),
criteria = parseInt(that.find('td:eq(1)').text(), 10),
grade = parseInt(that.find('td:eq(2)').text(), 10);
return grade > criteria ? 'good' : 'notGood';
});
编辑以解决我使用
parseInt()
而不是parseFloat()
来处理文本到数字的转换的事实:
$('tbody tr').addClass(function() {
var that = $(this),
criteria = parseFloat(that.find('td:eq(1)').text()),
grade = parseFloat(that.find('td:eq(2)').text());
return grade > criteria ? 'good' : 'notGood';
});
.问题,您是否存储了
$(this)
以将其保存在此范围内,还是只是不在this
上重复调用$
?只是为了避免重复重新创建jQuery$(this)
对象。如果只使用过一次,我就不会麻烦了,但是两次是不必要的。太好了,谢谢!最近我对作用域感到非常困惑(特别是在进入jQuery插件模式之后),所以每当我看到有人用这个
做某事时,我都会惊慌失措,我不得不问。@Blender没有任何线索。我是新手jquery@DavidPeterson,新事物?然后阅读文档,在谷歌上搜索一下,如果你在某件事情上遇到困难,我们都很乐意为你提供帮助。@Adnan我已经完成了这些工作。我会记住你的忠告。谢谢你,伙计。
$('tbody tr').addClass(function() {
var that = $(this),
criteria = parseFloat(that.find('td:eq(1)').text()),
grade = parseFloat(that.find('td:eq(2)').text());
return grade > criteria ? 'good' : 'notGood';
});