jquery tablesorter自定义解析器 - innerHTML与innerText

时间:2013-01-16 18:29:51

标签: internet-explorer jquery-plugins innerhtml tablesorter innertext

我正在使用tablesorter并尝试创建自定义排序解析器 - 解析器在Firefox中运行良好,但在Internet Explorer中完全失败。为什么解析器可以在一个中工作,而不能在另一个中工作?

2 个答案:

答案 0 :(得分:1)

在我的fork of tablesorter中,我还发现在IE9(当然还有所有其他现代浏览器)中使用textContent要快得多,所以我修改了internal coding以自动执行此操作:

if (config.supportsTextContent) {
    text = node.textContent; // newer browsers support this
} else {
    text = $(node).text();
}

我还对textExtraction option进行了一些其他改进,允许您获取cellIndex和/或为特定列添加函数。

答案 1 :(得分:0)

创建自定义解析器时,tablesorter使用此函数: getElementText(config,node)

getElementText将尝试从表格单元格中抓取文本 - 但某些表格单元格也可能包含html标记。包含其他html标签的Cell [td]标签(如[span]或[img])会导致IE出现问题,因为该函数只是抓取所有单元格的innerHTML(包括无关标签),而不仅仅是IE支持的innerText。

getElementText函数在Firefox中运行良好,因为该函数获取了Firefox支持的(不言自明的)textContent,忽略了单元格中的html标记。请参阅相关问题:jQuery tablesorter: custom html image tag sorter/parser

解决此问题的最佳方法是使tablesorter首先正确地获取单元格文本,具体取决于浏览器,innerText或textContent所支持的内容。克林的回答帮助我走上了正确的道路: How to clear tags from a string with JavaScript

打开tablesorter.js文件并修改下面显示的getElementText(config,node)部分。我还将这个建议提交给了tableorter作者。

将innerHTML替换为innerText:

if (config.supportsTextContent) {
    text = node.textContent;
} else {
    if (node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
        text = node.childNodes[0].innerText;
    } else {
        text = node.innerText;
    }
}