2016-12-18 4 views
0

HTMLのファイルに段落の段落があるとします。 TreeWalkerのを使用すると、私は配列にすべての非空のテキストノードをプッシュ:私は「変更」という文字列を持つすべての要素を交換するように、配列の内容を変更しようとすると参照でDOM要素を変更する

function getTextNodes(elem) { 
    var textNodes = []; 
    var nextNode; 

    var treeWalker = document.createTreeWalker(elem, NodeFilter.SHOW_TEXT, { 
     acceptNode: function(node) { 
      return node.textContent !== "\n" ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT; 
     } 
    }, false); 

    var counter = 1; 

    while (nextNode = treeWalker.nextNode()) { 
     textNodes.push(nextNode); 

     console.log("Pushed " + counter + " times."); 

     counter++; 
    } 

    return textNodes; 
} 

を、何もブラウザウィンドウに起こりません。

ノードを参照によって保存することは可能ですか?変更するたびにブラウザのテキストも変更されるようになりますか?

EDIT:配列要素を変更

function changeTextNodes(elem) { 
    for (var i = 0; i < elem.length; i++) { 
     elem[i] = "change "; 
    } 
} 

コード。

EDIT2:

$(document).ready(function() { 
    changeTextNodes(getTextNodes(document.body)); 
}); 

ここでは2つの機能が呼び出される方法です。

+0

をどこにノードを変更しようとするコードですか?それが動作しないコードなら、ここに投稿する必要があります。そうしないと誰も助けられません。また、 '.textContent'は要素ノードからもコンテンツを返すので、ループはテキストノードをポストするだけではありません。 – Pointy

+1

@Pointy:.textContentは "\ n"のみを含むTextNodeをフィルタリングするために使用されます。メインフィルターはその前のパラメーターです。 –

+0

ああ、そうだよ。申し訳ありません。 – Pointy

答えて

1

テキストを変更しようとするコードは、ノードの集計から配列の結果を調べます。その配列はのノードで構成されています。そのため、コンテンツを変更するには、ノードAPIを使用してコンテンツを変更する必要があります。現在、コードは配列の内容を変更するだけで、DOMには影響しません。それは単なるJavaScript配列です。内容を変更するには

、あなたがnodeValueプロパティ変更したい:

for (var i = 0; i < elem.length; i++) { 
    elem[i].nodeValue = "change "; 
} 
+0

素晴らしいです、ありがとう! –

関連する問題