【问题标题】:Match date pattern in table cells with jQuery使用 jQuery 匹配表格单元格中的日期模式
【发布时间】:2013-10-21 07:00:36
【问题描述】:

我有一个 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 |
+-------+-----------+-----------------------+-----------------------+----------+

【问题讨论】:

  • 所以您想从该列中检索所有单元格?即使根本不进行解析,您也可以这样做,因为您知道属于一列的所有单元格都具有相同的模式..
  • @f00bar 会有其他表格的列标题和列顺序无法预测。
  • 日期模式总是一样的吗?
  • @f00bar 是的,总是一样的。

标签: javascript jquery html-table


【解决方案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;
                                   }); 
              } 
            });

然后在拨打map()之后拨打.unique()

【讨论】:

  • 我会在过滤器函数内部测试单元格的text() 而不是html()
  • 出于某种原因,当我对此进行测试时, $.unique 不会删除重复值。也许是因为它看到了一个包含所有重复值的唯一 jQuery 对象?但是,我只需要检查第一行的模式匹配,因为同一列中的所有其他单元格都保证与模式匹配。考虑到这一点,我可以调整你给我的东西。
  • 是的——忘记 $.unique 调用吧,它只适用于 DOM 元素数组。在我正在试验的 JSFiddle 中似乎可以正常工作,但这一定是偶然的。
猜你喜欢
  • 2019-10-31
  • 2023-04-05
  • 2018-02-21
  • 1970-01-01
  • 2011-11-18
  • 2014-02-11
  • 2018-09-28
  • 2020-09-17
  • 1970-01-01
相关资源
最近更新 更多