jquery tablesorter textExtraction

时间:2012-11-01 06:02:13

标签: tablesorter

我正在使用jquery tablesorter插件

网页在这里:http://redbluffbullsale.com/bulls-listings

我有一个复杂的textExtraction函数定义如下:

var jgExtraction = function(node) {
  if (node.childNodes[0].length > 0) {
    return node.childNodes[0].innerHTML;
  } else {
    return node.innerHTML;
  }
}

jQuery('#bullsTable').tablesorter({
  textExtraction: 'jgExtraction',
  headers: {
    0 : {sorter: false},
    13: {sorter: 'digit'},
    14: {sorter: 'digit'}
  }
});

在一些列(13和14)中,有数据可以采用以下格式:

号码(例如:0.9,2.3,4,-2,-2.5等) 文字(字母I)加上数字(I + 2.3,I-0.9,I + 1.4等) 加号(+ 2.4,+ 3.1,+ 0.9等)

在服务器上我控制列数据,这样如果它是数字或负数,它会被转储到< td>,但如果列数据有I +,I-或a +,那么该列具有与该数字分开的I +,I-或+,其中< span>标签,如:

<td>-1.4</td>
<td>I+<span>1.6</span></td>
<td>I-<span>3.4</span></td>
<td>+<span>2.2</span></td>

如果没有span子节点,我的jgExtraction应返回innerHTML,如果存在,则返回childNode [0](span)的内容。对于具有I +或I-的列,排序不起作用。您可以通过查看上面的网址来查看错误。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

上述代码中存在一些问题。

  • 不应将文本提取功能的名称添加为字符串

    textExtraction: 'jgExtraction', // wrong
    textExtraction: jgExtraction,   // correct
    
  • jgExtraction函数中,检查子节点的长度,而不是第一个项的长度

    if (node.childNodes[0].length > 0) { // wrong 
    if (node.childNodes.length > 1) {    // correct
    
  • 检查其innerHTML时,文本节点将返回undefined。无论如何它应该以跨度为目标:

    return node.childNodes[0].innerHTML // wrong
    return node.childNodes[1].innerHTML; // target the span
    

这是修改过的代码&amp; a demo

var jgExtraction = function(node) {
    if (node.childNodes.length > 1) {
        return node.childNodes[1].innerHTML;
    } else {
        return node.innerHTML;
    }
}

如果您感兴趣,我有一个fork of tablesorter,它允许您将空表单元格排序到顶部,底部或将它们视为零值(默认行为) - 请参阅{{3} }