jquery自定义解析器——innerHTML vs. innerText



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

在我的tableorter分支中,我还发现在IE9(当然还有所有其他现代浏览器)中使用textContent要快得多,所以我修改了内部代码以自动执行:

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

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

当你创建一个自定义解析器时,tablesorter使用这个函数:getElementText(配置、节点)

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

getElementText函数在Firefox中工作得很好,因为该函数获取Firefox支持的(不言自明的)textContent,忽略单元格中的html标记。参见相关问题:jQuery tablesorter:自定义html图像标签排序器/解析器

解决此问题的最佳方法是首先根据浏览器支持的内容(innerText或textContent),使tablesorter正确地抓取单元格文本。克林的回答帮助我走上了正确的道路:如何使用JavaScript从字符串中清除标签

打开tablesorter.js文件,修改如下所示的getElementText(config, node)部分。我也把这个建议提交给了表格编写者。

将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;
    }
}

最新更新