1

特定のパターンに従う日付を含むセルを含む 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 |
+-------+-----------+-----------------------+-----------------------+----------+
4

1 に答える 1

1

次の行に沿って何かを試すことができます。

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

...ここで、/.../ は、探している日付形式に一致する正規表現です。これにより、そのパターンに少なくとも 1 つの一致を含む列インデックスの配列が返されます。ユニークなリストではありません。次の正規表現は、パターンを探しているだけで、有効な日付であることを確認する必要がない場合に機能します...

/^\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));

編集: DOM 要素の配列専用の $.unique の誤った使用法を削除しました。次のようなものを利用できます。

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

次に、 への呼び出し.unique()の後に呼び出すだけmap()です。

于 2013-10-20T19:36:07.653 に答える