2012-01-16 24 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'); 
    } 
    }) 
});