2013-02-14 56 views
0

我有一个表是这样的:jQuery的不表单元格中正确地比较变量

<table id="comparison"> 
    <tr> 
     <th>Hotels</th> 
     <th>Jan 2013</th> 
     <th>Feb 2013</th> 
    </tr> 
    <tr> 
     <td>Lorem Ipsum Hotel</td> 
     <td> 
      <div class="rooms">165</div> 
      <div class="sob">352</div> 
     </td> 
     <td> 
      <div class="rooms">215</div> 
      <div class="sob">30</div> 
     </td> 
    </tr> 
</table> 

我准备这个jQuery脚本的客房和SOB比较每个单元格。
- 如果SOB小于房间,则我将SOB红色上色以表示否定结果。
- 如果SOB大于房间,则我将SOB绿色上色以表示正面结果。

$('#comparison td .sob').each(function() { 
    var rooms = $(this).prev().text(); 
    var sob = $(this).text(); 
    if (rooms > sob) { 
     $(this).css({'color': 'red'}); 
    } else { 
     $(this).css({'color': 'green'}); 
    } 
}); 

问题是这个脚本没有正确比较房间和SOB。它似乎在变量比较中随机运行,有时会产生正确的结果,而其他时间则不会。

我错过了什么?

回答

2

您正在使用文本值进行比较,而不是数值。

尝试更换这两行:

var rooms = $(this).prev().text(); 
var sob = $(this).text(); 

有了这个:

var rooms = parseInt($(this).prev().text(),10); // always use a radix 
var sob = parseInt($(this).text(),10); 

在另一方面,你可能要添加的CSS类生成你的页面的输出,如果你可以将代码(当然,假设HTML内容是动态生成的)。

+0

[总是使用基数与parseInt](http://stackoverflow.com/q/5600366/901048)。 – Blazemonger 2013-02-14 17:23:03

+0

D'oh!好,Blazemonger。我总是忘记这一点。 – doctorless 2013-02-14 17:23:10

+0

谢谢!它正在工作。我是新手,所以现在我知道解析整数的重要性。 – Alex 2013-02-14 17:39:45

0

试试这个

$('#comparison td .sob').each(function() { 
    var rooms = Number($(this).prev().html()); 
    var sob = Number($(this).html()); 
    if (rooms > sob) { 
     $(this).css({'color': 'red'}); 
    } else { 
     $(this).css({'color': 'green'}); 
    } 
}); 
0

试试这个,

var rooms = parseInt($(this).siblings('.rooms').text()); 
0

我认为你必须分析文本转换成int:

$('#comparison td .sob').each(function() { 
    var rooms = Math.floor($(this).siblings().text()); 
    var sob = Math.floor($(this).text()); 
    if (rooms > sob) { 
    $(this).css({'color': 'red'}); 
    } else { 
    $(this).css({'color': 'green'}); 
    } 
}); 

Math.floor():我在其他地方见过它相当的快针对parstInt()