Javascript 指定要排序的日期区域

Javascript 指定要排序的日期区域,javascript,jquery,datepicker,tablesorter,Javascript,Jquery,Datepicker,Tablesorter,我想要一个包含更多信息的TD,而不仅仅是其中的日期,但这会弄乱比较。有没有一种方法可以指定一个类,为比较提供日期?在本例中,如果我尝试在前两个日期排序,它可以正常工作,但第三个日期将无法工作,因为“事件信息”字符串。我可以在不创建新tabledata的情况下将两者分开吗 Javascript $(function() { $("table").tablesorter({ widthFixed : true, widgets: ["filter"], widgetOpt

我想要一个包含更多信息的
TD
,而不仅仅是其中的日期,但这会弄乱比较。有没有一种方法可以指定一个类,为比较提供日期?在本例中,如果我尝试在前两个日期排序,它可以正常工作,但第三个日期将无法工作,因为“事件信息”字符串。我可以在不创建新tabledata的情况下将两者分开吗

Javascript

$(function() {
  $("table").tablesorter({
    widthFixed : true,
    widgets: ["filter"],
    widgetOptions : {
      filter_formatter : {
        0 : function($cell, indx){
          return $.tablesorter.filterFormatter.uiDateCompare( $cell, indx, {
            dateFormat : 'M dd, yy',
            changeMonth : true,
            changeYear : true,
            compare : '='
          });
        }
      }
    }
  });
});
HTML

<table class="tablesorter">
  <thead>
    <tr>
      <th data-placeholder="Sort By Date">Date (one input; greater than)</th>
    </tr>
  </thead>
  <tbody>
    <tr><td>Jun 26, 2013</td></tr>
    <tr><td>Aug 21, 2013</td></tr>
    <tr><td><span class="compareDate">Oct 13, 2013</span><div class="info">Event Information</div></td></tr>
    <tr><td>Jul 6, 2013</td></tr>
    <tr><td>Dec 10, 2012</td></tr>
  </tbody>
</table>

我相信您可以在分类器初始化期间使用自定义textExtraction属性来隔离具有附加标记的单元格的日期:

像这样的事情应该可以做到:

textExtraction: function(node) { 
  return (node.childNodes[0].childNodes.length > 0) ? 
    node.childNodes[0].innerText : 
    node.innerText ;
} 
下面是一个演示如何在不同级别的内部单元格标记中使用它的小提琴:


它包括处理问题中的两种日期格式(vanilla和span,带有以下div),但如果您预期会有更多类型的标记(例如您提到的下拉列表和文本输入),则可能需要对节点解析进行一些更改。我认为您只需要考虑任何预期的标记格式和/或退回到合理的默认值

这难道不适用于所有的排序函数,而不仅仅是一个特定的排序函数吗?如果我有多个排序功能(下拉列表、文本输入等),那么我不确定这是否可行,但我会继续研究,谢谢!在这种情况下,我想您必须在formatter函数中实现一个条件开关,该开关处理不同的数据和标记排列,具体取决于它们的类型。可能会有点毛茸茸的。。。如果你找到更干净的方法,请告诉我,祝你好运!是的,即使使用提取的数据,但我不完全确定如何处理它,或者在哪里设置它,以便它与datepicker/filter_格式化程序配合使用。我会用我找到的东西来更新它,但即使是查看插件核心代码,我也不确定。我添加了一个JSFIDLE示例,看起来它应该可以工作。
textExtraction: function(node) { 
  return (node.childNodes[0].childNodes.length > 0) ? 
    node.childNodes[0].innerText : 
    node.innerText ;
}