Angenommen, ich habe einen Textabschnitt in einer HTML-Datei. Mit TreeWalker schob ich jedes nicht leeren Textknoten auf ein Array:Ändern von DOM-Elementen durch Referenz
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;
}
Wenn ich versuche, den Inhalt des Arrays zu ändern, wie jedes Element mit der Zeichenfolge „verändert“ zu ersetzen, passiert nichts im Browser-Fenstern.
Ist es irgendwie möglich, die Knoten als Referenz zu speichern, so dass sich bei jeder Änderung der Text im Browser ändert?
EDIT:
function changeTextNodes(elem) {
for (var i = 0; i < elem.length; i++) {
elem[i] = "change ";
}
}
Der Code, der die Array-Elemente ändert.
EDIT2:
$(document).ready(function() {
changeTextNodes(getTextNodes(document.body));
});
Hier ist, wie die 2 Funktionen aufgerufen werden.
Wo ist der Code, der die Knoten zu ändern versucht? Wenn das der Code ist, der nicht funktioniert, sollte er hier veröffentlicht werden, sonst kann niemand helfen. Außerdem stellt Ihre Schleife nicht nur Textknoten bereit, da '.textContent' auch Inhalt von Elementknoten zurückgibt. – Pointy
@Pointy: .textContent wird nur zum Ausfiltern von TextNodes verwendet, die nur "\ n" enthalten. Der Hauptfilter ist der vorhergehende Parameter. –
oh richtig, ich verstehe; Das tut mir leid. – Pointy