我正在使用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-的列,排序不起作用。您可以通过查看上面的网址来查看错误。
我做错了什么?
答案 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} }