2016-10-28 3 views
0

次のスクリプトを使用して、ページ内のすべてのテキストを空白なしの長いテキストに変更します。 "aquickbrownfoxjumpedoveralazyfrog"これは、テキストがすべての場所で正常に切断されているかどうかをテストするためです。ページ内のすべてのtextNodesを変更する

しかし、コンソールに貼り付けてスクリプトを実行すると、何らかの形でこのテキストがランダムに別の場所に追加され、奇妙なことにページがいっぱいになります。私が間違ってやっていることについてのアイデア?

(function(el, string){ 
    var n, a=[], walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false); 
    while(n=walk.nextNode()) n.nodeValue = string; 
}(document.body, 'abigfoxjumpedoveralazyfrogmultipletimes')); 
+1

基本的なデバッグ: ' while(n = walk.nextNode())console.log(n.nodeValue) ' –

答えて

3

テキストノードは空白だけでもかまいませんが、別の方法では空白もテキストノードであることに注意してください。そのようなノードはあなたのスクリプトによって記入されます。これにより、置換テキストが多くの予期しない場所に表示されます。

<div>**THERE IS AN EMPTY TEXT NODE HERE** 
    <span>Hi bob</span>**THERE IS AN EMPTY TEXT NODE HERE** 
</div> 

あなたの結果は、このようにテキストノード内の任意の非空白文字の存在のためのテスト、これを避けるために

<div>abigfoxjumpedoveralazyfrogmultipletimes 
    <span>abigfoxjumpedoveralazyfrogmultipletimes</span>abigfoxjumpedoveralazyfrogmultipletimes 
</div> 

次のようになります。

while (n=walk.nextNode()) if (/\S/.test(n.nodeValue)) n.nodeValue = string; 
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

ありがとうございます、これで問題は解決しました。空白がそれ自身のテキストノードであるという事実を忘れてしまった。 – sabithpocker

1

あなたはSHOW_TEXTがあなたに見えるテキストを与えることを期待していますか?ここでの私の直感は、SHOW_TEXTがどのように選択されるのか、どのようにするのかを切り離すことです。

残念なことに、これに関するMDNドキュメントには、具体的な例がありません。 What Is A Text Node, Its Uses? //document.createTextNode()

要素がテキストノードである複数の子を持っていることと思われる。

はここで何が起こっているのかを説明するかもしれない、スタックオーバーフローの答えです。あなたが解析しているHTMLがどのようなものかはわかりませんが、複数のテキストノードが同じ文字列に設定されている可能性があります。

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](レビュー/低品質の投稿/ 14129142) –

+0

リンクの後の段落には、回答の必須部分が含まれていると思いますか? –

+0

@ D. "リンクのみの削除"を避けたい場合は、おそらくコード例を書いてください。 – Tibrogargan

関連する問題