0

我正在使用 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- 或 +,则该列具有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- 的列。您可以通过查看上面的 URL 来了解问题所在。

我究竟做错了什么?

4

1 回答 1

2

上面的代码有几个问题。

  • 文本提取函数的名称不应添加为字符串

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

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

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

这是修改后的代码和演示

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

如果您有兴趣,我有一个tablesorter 的分支,它允许您将空表格单元格排序到顶部、底部或将它们视为具有零值(默认行为) - 请参阅此演示

于 2012-11-01T18:47:18.723 回答