私は tablesorter を使用しており、カスタム ソート パーサーを作成しようとしています。パーサーは Firefox ではうまく機能しますが、Internet Explorer では完全に失敗します。パーサーが一方では機能するのに、他方では機能しないのはなぜですか??
2 に答える
tablesorter のフォークでtextContent
、IE9 (そしてもちろん他のすべての最新ブラウザー) での使用がはるかに高速であることもわかったので、これを自動的に行うように内部コーディングを変更しました。
if (config.supportsTextContent) {
text = node.textContent; // newer browsers support this
} else {
text = $(node).text();
}
また、特定の列の関数を取得および/または追加できるtextExtraction
オプションにいくつかの改善を加えました。cellIndex
カスタム パーサーを作成する場合、tablesorter は次の関数を使用します: getElementText(config, node)
getElementText は表のセルからテキストを取得しようとしますが、一部の表のセルには html タグも含まれる場合があります。セルの [td] タグに他の html タグ ([span] や [img] など) が含まれていると、IE で問題が発生します。これは、IE がサポートする innerText だけでなく、セルのすべての innerHTML (外部タグを含む) を関数が取得するためです。
getElementText 関数は、セル内の html タグを無視して、Firefox がサポートする (自明の) textContent を取得するため、Firefox でうまく機能します。関連する質問を参照してください: jQuery tablesorter: custom html image tag sorter/parser
この問題を解決する最善の方法は、ブラウザーでサポートされているもの、innerText または textContent に基づいて、最初に tablesorter がセル テキストを適切に取得するようにすることです。クリングの答えは、私を正しい道に導くのに役立ちました: How to clear tags from a string with JavaScript
tablesorter.js ファイルを開き、以下に示す getElementText(config, node) の部分を変更します。また、この提案を tablesorter の作成者に提出しました。
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;
}
}