2016-07-05 19 views
1

Ich versuche, einen Knotenwert durch einen HTML-Inhalt zu ersetzen. Aber wenn ich das versuche, werden die HTML-Tags in der HTML-Seite anstelle des angewandten Stils angezeigt.Ersetzen von ChildNode-Werten durch HTML-Inhalt

<style> 
    .YellowSelection { 
     background: yellow; 
    } 
</style> 

var capturedText = 'test'; 
var changedText = '<span class="YellowSelection">test</span> Day'; 
htmlreplace(capturedText, changedText); 

function htmlreplace(capturedText, changedText, element) { 

var nodes = element.childNodes; 
for (var n=0; n<nodes.length; n++) { 
    if (nodes[n].nodeType == Node.TEXT_NODE) { 
     var r = new RegExp(capturedText, 'gi'); 
     console.log(nodes[n]); 
     nodes[n].textContent = nodes[n].textContent.replace(r, changedText); 
    } else { 
     htmlreplace(capturedText, changedText, nodes[n]); 
    } 
} 
} 

enter image description here

Aktualisiert (Complete-Code).

<style> 
    .YellowSelection { 
     color: yellow; 
    } 
</style> 

function returnSelection() { 

    var capturedText; 
    var changedText; 

    capturedText = window.getSelection().toString().replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
    changedText = '<span class="YellowSelection">' + capturedText + '</span>'; 


     htmlreplace(capturedText, changedText); 

    } 
} 

function htmlreplace(capturedText, changedText, element) {  
    if (!element) element = document.body;  
    var nodes = element.childNodes; 
    for (var n=0; n<nodes.length; n++) { 
     if (nodes[n].nodeType === 3) { 
      var r = new RegExp(capturedText, 'gi'); 
      nodes[n].innerHTML = nodes[n].textContent.replace(r, changedText); 
     } else { 
      htmlreplace(capturedText, changedText, nodes[n]); 
     } 
    } 
} 
+0

wo 'htmlreplace()' definiert? –

+0

Ich habe den Code jetzt korrigiert. Ich mache mir mehr Gedanken über diese Zeile - nodes [n] .textContent = nodes [n] .textContent.replace (r, changedText); – locknies

+0

Sie legen den Textinhalt fest, der den Textinhalt des angegebenen Knotens und aller seiner Nachkommen setzt oder zurückgibt. , ich denke, dass Sie für innerHTML sollten, wenn Sie das HTML-Element – Deep

Antwort

0

Sie verwenden textContent, die den Text und nicht HTML-Inhalt ändern wird, versuchen innerHTML statt textContent zu verwenden:

nodes[n].innerHTML = nodes[n].textContent.replace(r, changedText); 

hoffen, dass dies hilft.

var capturedText = 'test'; 
 
var changedText = '<span class="YellowSelection">test</span> Day'; 
 

 
var node_1 = document.getElementById('div1'); 
 
node_1.innerHTML = node_1.textContent.replace(capturedText, changedText); 
 

 
/*********/ 
 

 
var node_2 = document.getElementById('div2'); 
 
node_2.textContent = node_2.textContent.replace(capturedText, changedText);
.YellowSelection{ 
 
    color: green; 
 
}
<div id='div1'>Div 1 test</div> 
 
<div id='div2'>Div 2 test</div>

+0

Versuchte dies bereits. aber nicht arbeiten !! Ich werde ein komplettes Codebeispiel bereitstellen. – locknies

+0

Überprüfen Sie bitte mein Update. –

+0

Lassen Sie mich das überprüfen. Eigentlich versuche ich ein 'Chrome Extension' Plugin zu schreiben und wenn ich versuche dies auszuführen, funktioniert es nicht, aber es zeigt keinen Fehler an. – locknies