使用jQuery匹配表格单元格中的日期模式

时间:2013-10-20 18:55:53

标签: javascript jquery html-table

我有一个HTML表格,其中的单元格包含遵循特定模式的日期。当单元格包含日期时,同一列中的所有单元格都是相同模式的日期。如何使用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 |
+-------+-----------+-----------------------+-----------------------+----------+

1 个答案:

答案 0 :(得分: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元素的数组。你可以使用这样的东西:

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

然后在致电.unique()后致电map()