2013-10-20 63 views
1

我有一個HTML表格,其中的單元格包含遵循特定模式的日期。當單元格包含日期時,同一列中的所有單元格都是相同模式的日期。我如何使用jQuery來匹配格式並返回列?這裏是一個演示模式的示例表:使用jQuery在表單元格中匹配日期模式

+-------+-----------+-----------------------+-----------------------+----------+ 
| Type | Compiled? | Modified (CDT)  |  Created (CDT)  | Priority | 
+-------+-----------+-----------------------+-----------------------+----------+ 
| Fancy | yes  | Oct 18, 2013 16:17:00 | Oct 08, 2013 05:50:32 |  75 | 
| Fancy | yes  | Oct 18, 2013 16:16:28 | Oct 18, 2013 15:46:05 |  75 | 
| Fancy | yes  | Oct 18, 2013 16:15:25 | Oct 17, 2013 19:04:51 |  75 | 
+-------+-----------+-----------------------+-----------------------+----------+ 
+0

所以你想從這個列中檢索所有單元格?即使沒有解析,你也可以這樣做,因爲你知道屬於一列的所有單元格都具有相同的模式。 – Stphane

+0

@ f00bar將會有其他表格具有不可預知的列標題和列順序。 – Keyslinger

+0

日期模式總是一樣嗎? – Stphane

回答

1

你可以嘗試沿着這些路線的東西:

$('table td').filter(function() { return /.../.test($(this).html()); }).map(function() { return $(this).index(); }); 

...其中/.../是匹配的日期格式你是一個正則表達式尋找。這將返回包含至少一個匹配的列索引數組。這不是一個獨特的列表。下面的正則表達式將工作,如果你只是在尋找一種模式不是絕對需要的,以確保它是一個有效的日期......

/^\w{3}\s\d+,\s\d{4}\s\d{1,2}:\d{2}:\d{2}$/ 

(這將匹配Ziptember的45的99點,所以也許獲得更好的正則表達式)

我會打破那個高密度線位,說明東西好一點。

date_filter = function() { return /^\w{3}\s\d+,\s\d{4}\s\d{1,2}:\d{2}:\d{2}$/.test($(this).html())} 

map_td_to_index = function() { return $(this).index(); } 

console.log($('table td').filter(date_filter).map(map_td_to_index)); 

編輯:刪除的$ .unique錯誤的用法,這是唯一用於DOM元素的數組。調用map()

$.fn.extend({ unique: function() 
       { 
       arr = $.makeArray(this); 
       return $.grep(arr, function(elem, idx) 
            { 
            return $.inArray(elem, arr, idx + 1) === -1; 
            }); 
       } 
      }); 

然後就叫.unique():你可以使用這樣的事情。

+0

我會測試對單元格的文本()而不是'html()',在濾波器函數 – Stphane

+0

中測試。 – struthersneil

+0

出於某種原因,當我測試這個時,$ .unique不會刪除重複的值。也許是因爲它看到一個包含所有重複值的獨特jQuery對象?但是,我只需要檢查模式匹配的第一行,因爲同一列中的所有其他單元格都保證匹配模式。我可以根據你的想法調整你的想法。 – Keyslinger