jQuery tablesorter-头中的rowspan导致异常行为

jQuery tablesorter-头中的rowspan导致异常行为,jquery,tablesorter,html-table,Jquery,Tablesorter,Html Table,失败示例: 期望的行为: 理想情况下,任何带有colspan的标题都不应影响排序。现在,它们接收排序按钮,即使我为每个colspan头指定头:{index:{sorter:false}},它们仍然会影响排序。当我单击没有rowspan或colspan(1.1.2等)的标题时,它们似乎导致排序发生在右边的4列 我无法复制的工作示例: 这个页面似乎显示了这种行为的有效性,但我无法重现。rowspan的示例甚至没有手动关闭这些标题,所以发生了什么?!我确实看到示例中的colspan头没有头类,但这

失败示例:

期望的行为:
理想情况下,任何带有
colspan
的标题都不应影响排序。现在,它们接收排序按钮,即使我为每个colspan头指定
头:{index:{sorter:false}}
,它们仍然会影响排序。当我单击没有rowspan或colspan(1.1.2等)的标题时,它们似乎导致排序发生在右边的4列

我无法复制的工作示例:

这个页面似乎显示了这种行为的有效性,但我无法重现。rowspan的示例甚至没有手动关闭这些标题,所以发生了什么?!我确实看到示例中的colspan头没有
类,但这似乎是由tablesorter插件应用的

有人知道发生了什么事吗

工作画面:

不工作图片:

我尚未对此进行全面测试,但我建议更新您的文档类型。根据经验,表分拣器(通常包括jQuery)对文档类型非常敏感

演示(有效)使用了以下内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

编辑:在更新DocType之后,它仍然不适用于我。然后我下载了演示站点上使用的TableSorter版本,现在它作为演示版工作。唯一的另一个区别是,我在文档的头部分包含了脚本和css,但这应该没有什么区别


我确实认为jQuery的版本可能会有问题,但我使用的是1.3.2,使用的是与您相同的资源。

文档演示使用的jQuery和Tablesorter的版本与您不同。通过比较源代码,我发现在较新版本中从未进行过自动列/行范围检测。spans检测函数仍然在那里,但是没有被调用。不知道为什么会出现这种倒退

也就是说,我可以使用以下设置运行您的演示:

$(document).ready(function(){
  $('#rowspan').tablesorter({
    headers: {
      4: {sorter: false},
      5: {sorter: false},
      6: {sorter: false},
      7: {sorter: false}
    } 
  });
});
如果您知道
colspan>1
是一个安全的标准,那么我会推断如下标题索引:

$(function(){
  var headers = {};
  $('#rowspan thead th').each(function(i,h){
    if (this.colSpan>1) { headers[i] = { sorter: false }; }
  });
  $('#rowspan').tablesorter({
    headers: headers
  });
});
更新:

一个“有效”的例子:

这个例子看起来像你要的,或者我不理解你的问题。然而,我刚刚发现,单击标记为3.1-4.2的标题会引发异常。所以,我想我对你的问题的最终答案是:这个插件的当前版本不适用于row或colspan

更新:

一个简单的修补程序可以实现这一点:

在函数
buildHeaders
(第290行)中,更改行
$tableHeaders=$(“thead th”,table)至:

$tableHeaders = $("thead th:not([colspan]),thead th[colspan=1]",table);
更复杂的方法是使用灵活的修补程序:

将配置参数添加到
buildHeaders
(第290行):

以及
$tableHeaders
(第299行)的过滤器:

调用配置时将其传递给buildHeaders(第504行):

初始化表排序器时添加筛选器:

$(function(){
  $('#rowspan').tablesorter({
    headerFilter: function(){ return this.colSpan == 1; }
  });
});

这包括
头部过滤器
选项

该功能已禁用,如下所示:

我找到了另一种方法来达到同样的效果,在表排序器js中,第298行附近有一条代码规则:

$tableHeaders = $("thead th",table);
换成

$tableHeaders = $("thead th:not([colspan])",table);
这对我很有用

编辑:
更改了代码和位置,仅供参考,由red-X提供的修复程序:

$tableHeaders=$(“thead th”,table); 换成

$tableHeaders=$($thead th:not([colspan]),表)


断开IE6和IE7的tablesorter插件。我提出的唯一解决方案(我在别处找到的)是,您需要有一行,并且只有一行包含TH标记。您可以在THEAD中有其他列(包括带有colspan的列),但它们必须使用TD标记。这在标记方面并不理想,但至少插件可以在IE6和IE7上工作。

这不起作用,因为禁用的列仍然“控制”内部标题需要控制的列。这不起作用。它仍然会将不应该获取的类添加到头中,并且当您单击标记为3.1到4.2的头时,它会抛出错误。如果更改了它,错误将不再发生。添加了哪些类?他们得到的唯一类是类“header”,它是在html中添加的,而不是由js添加的。
$(function(){
  $('#rowspan').tablesorter({
    headerFilter: function(){ return this.colSpan == 1; }
  });
});
$tableHeaders = $("thead th",table);
$tableHeaders = $("thead th:not([colspan])",table);