Tablesorter解析器忽略div元素

时间:2015-02-01 19:17:19

标签: javascript jquery html tablesorter

我的网页上有一些表格,我使用tablesorter扩展名来进行排序。除了一张桌子,一切都很好。此特定表包含数值,但也包含div元素。问题是,由于存在div,因此tablesorter将其视为文本,例如“1000”的排序低于“999”,因为它只识别初始的1和9.

我已阅读文档并尝试基于它实现自定义解析器 - http://tablesorter.com/docs/example-parsers.html

不幸的是它不起作用。基本上我想要实现的 - 单元格总是包含一个数字后跟“......”等等所以我试图过滤掉最初“<”前面的值。符号。但由于某种原因,它只是忽略了解析器。

很难正确解释,所以我创建了一个jsfiddle。请忽略其余的设计,图片等,它在我的页面上看起来有所不同,但问题出在那里。

例如,查看“Total”列,有大于1000的数字,但它的排序低于100以上的数字(显然被视为文本)。通过单击表头来初始化排序。

任何帮助表示赞赏。 http://jsfiddle.net/8v8ycb09/

解析器代码:

$.tablesorter.addParser({ 
    // set a unique id 
    id: 'main', 
    is: function(s) { 
        // return false so this parser is not auto detected 
        return false; 
    }, 
    format: function(s) { 
        // format your data for normalization 
        return s.substr(0, s.indexOf('<')); 
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
}); 

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您只需要格式化功能return parseInt(s)

parseInt()忽略了一个前导数字字符串之后的初始空格和任何内容。

format: function (s) {
    // format your data for normalization 
    return parseInt(s);
},

将自定义排序器应用于列,如下所示:

$(function () {
    var sMap = {sorter:'main'};
    $("#rTable").tablesorter({
        headers: {
            2: sMap,
            3: sMap,
            4: sMap,
            5: sMap,
            6: sMap,
            7: sMap,
            8: sMap,
            9: sMap,
            10: sMap,
            11: sMap,
            12: sMap,
            13: sMap,
            14: sMap,
            15: sMap,
            16: sMap
        }
    });
});

Demo

答案 1 :(得分:1)

您可以使用textExtraction轻松完成:

 var myTextExtraction = function(node) { 
    return node.textContent.replace(/\s/g, "").replace(/(^\d+)(.+$)/i,'$1'); 
} 

$("#rTable").tablesorter({ 
    textExtraction: myTextExtraction
});

<强> DEMO