0

DOM ノードとそのすべての子ノードを、デザインのプレーン テキスト マークアップに変換しようとしています。を使用node.childNodesして、すべてのコンテンツのリストを取得し、それを再帰的に文字列形式に変換できます。

ただし、 からテキストを取り出すとTextNode、ページに表示されない改行とスペースが含まれます。プレーンテキストの場合、HTML と同じ外観を取得したいので、HTML マークアップに含まれていたとしても、テキストの前に多くのインデントや改行があってはなりません。 HTML をレンダリングしました。

明らかな答えは.trim()、自分自身の文字列に対するものです-ただし、これにより、テキストに存在するはずのスペースが削除される可能性があります<em>text.</em> moretext. 後者のテキスト ノードは、その前のスペースを失います。

それが機能していたとしても、哲学的にも魅力的ではありません。このアルゴリズムは、ユーザーに提示されたテキストに基づいている必要があります。Web ページは、基になるマークアップのスペース、タブ、改行などの実装の詳細を隠していますtrim()node.textContent理想的には、何らかの形でプレーンテキストと子要素の両方のリストを持つ同等のものがあるでしょう。

私はこれについて何も見つけることができず、それらのスペースについて賢くなるようにコーディングする良い方法がわかりません(.textContentと文字列を比較したり、自分自身や何かを.nodeValue解析したりする以外に)。innerHTMLヘルプ?

4

2 に答える 2

0
document.getElementById("someid").innerText.replace(/\s+/g," ")

トリムメソッドは、文字列の先頭と末尾のスペースを削除しますが、中央のスペースは削除しません

于 2013-02-19T03:23:55.383 に答える
0

私はRangyライブラリのTextRange モジュールの一部として、まさにこれの実装を作成しましたが、これだけのために含めるには多くのコードが必要です。

var displayedText = rangy.innerText(node);
于 2013-02-19T10:55:45.470 に答える