在jquery.tablesorter解析器开始工作之前删除嵌套的html?

时间:2011-10-10 15:11:28

标签: jquery tablesorter

我有几个解析器,并且在一列中是一个问题,因为它包含隐藏内容(鼠标悬停框)。为了避免这个问题,我想删除嵌套的完整内容。

f.e:

<td>50,3<span>12 payments</span></td>
<td>20,1<span>230 payments</span></td>

我的解析器将德语格式化的数字转换为float:

    $.tablesorter.addParser({
        id: "floatval",
        is: function(s) {
            return false;
        },
        format: function(s) {
            return s.replace(/\./g,"").replace(/,/g,".").replace(/[^0-9-.]/g, "");
        },
        type: "numeric"
    });

但是在这个特殊的专栏中,我还需要删除嵌套的html。目前我使用了一个特殊的解析器同时执行这两个操作,但是我想如果有一个解决方案可以在字符串通过解析器之前更改字符串(解析器删除了html标记,因此我无法删除嵌套的html)?!

问候

2 个答案:

答案 0 :(得分:1)

尝试使用textExtraction代替(demo):

$('table').tablesorter({
    textExtraction: function(node){
        return node.childNodes[0].nodeValue;
    }
});

它的作用是获取第一个节点(本例中为文本节点)的值,因此您无法将文本包装在span(或其他任何)中,否则此函数将无法正常工作。

答案 1 :(得分:1)

确定。两天后,我希望完成过滤器。

对于这个功能强大的数字滤镜,可能最好替换核心的tableorter过滤器“百分比”,“货币”和“数字”:

// return floating point number (handles 1.- or 1.--)
s = parseFloat(
    // remove whitespace 1 234,56 and quote 1'234,56 followed by three digits
    s.replace(/[' ](?=[0-9]{3})/g, '')
    // remove all html tags and linebreaks
    .replace(/(<.*?>|\s)/g, ' ')
    // remove anything after last digit of first number
    .replace(/([0-9])[^0-9-.,].*/, '$1')
    // replace commas by dots
    .replace(/,/g, '.')
    // remove anything except floating point
    .replace(/[^0-9-.]/g, '')
    // remove all dots except the last one
    .replace(/\.(?=.*?\.)/g, '')
);

演示:

http://www.programmierer-forum.de/html/javascript-parse-float-extended.html

正如您所看到的,它适用于所有国际数字格式(us,de,ch等)和类型(货币,百分比,整数,浮点数等)并删除所有嵌套的html标记加上它忽略所有数字以下是第一个。

随意加强它(例如,结合最后两次替换)。