Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较表中的单元格并将CSS类添加到其<;tr>;_Javascript_Jquery_Jquery Ui - Fatal编程技术网

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';
});