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