2012-01-16 42 views
3

我有一个包含一些动态生成数据的表。问题是我想选择具有数字(格式化或非格式化)数据类型的所有<td>'s,并向它们应用一些样式。如何用jQuery或JavaScript做到这一点? 任何帮助或建议,将不胜感激。谢谢。从表中选择包含数值的td

<table> 
<tr> 
    <th>Days</th> 
    <th>Booth 1</th> 
    <th>Booth 2</th> 
    <th>Booth 3</th> 
</tr> 
<tr> 
    <td>Monday</td> 
    <td>12,000</td> 
    <td>2,500</td> 
    <td>0</td> 
</tr> 
<tr> 
    <td>Tuesday</td> 
    <td>4,200</td> 
    <td>0</td> 
    <td>3,500</td> 
</tr> 
<tr> 
    <td>Wednesday</td> 
    <td>Out Of Order</td> 
    <td>Busy</td> 
    <td>11,540</td> 
</tr> 
</table> 

回答

5

如何像

$('td').each(function() { 
    if ($(this).html().match(/^\s*\d[\d,\.]*\s*$/)) { 
     $(this).css('background-color', 'red'); 
     // TODO: something cool 
    } 
}); 

它使用一个简单的正则表达式匹配一个数字,然后零个或多个数字或逗号或小数点内<td>元素。然后,您可以对元素执行任何您喜欢的操作。

+0

这完全是惊人的。正是我想要的。非常感谢@rfausak – 2012-01-16 00:59:30

+0

@ciriusrob然后你应该接受答案。 – 2012-01-16 09:33:38

4

在生成服务器端时,您最好只为这些td s添加一个类。

如果这不是一种选择,你可以使用.filter()用正则表达式:

$('td').filter(function(){ 
    return /^[.,\d]+$/.test($.text(this)); 
}) 
.css('color', 'blue'); // or anything else... 

这里的小提琴:http://jsfiddle.net/m7gQL/

+0

很酷。这太棒了,这有效。非常感谢@Silber – 2012-01-16 01:17:19

1

假设的问题是一个在消息文本中,而不是在标题中,最好的办法可能是为包含数字数据的单元格指定一个合适的类属性。这在生成表格数据时最好完成,因为您应该知道生成的是哪种数据。如果这不可行,您可能需要编写一个循环来处理单元格,并根据数字模式尝试解析其内容(整个包含)。您需要指定可能出现的数字数据的类型(例如,只是整数,还是别的?以及哪些符号?)。

+0

当涉及到列数和行数时,在服务器端生成的'html表格是不可预知的。它是从一个复杂的'sql query'生成的,用于报告,因部门而异,所以根据结果集,服务器端代码统计受影响的'sql tables'的数量并生成'html table'的列 – 2012-01-16 01:16:16

0

你不能通过查看生成的HTML来做到这一点,因为即使一个单元格包含一个数字,该列的数据类型可能仍然是String。相反,您在生成HTML时必须输出此信息。所以,用数字数据类型的细胞会得到一个属性

<td class="numeric"> ... </td> 

而且numeric将被定义为

td.numeric { ... } 
0

试试这个:

$(document).ready(function(){ 
    $('table td').each(function(){ 
    if (!isNaN($(this).html().replace(',',''))) 
    { 
     $(this).css('background-color', 'green'); 
    } 
    }) 
}); 
相关问题