2016-07-05 105 views
1

Iam尝试用html内容替换节点值。但是当我尝试这个HTML标签显示在HTML页面而不是应用的风格。用html内容替换ChildNode值

<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

更新(完整代码)。

<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

其中'htmlreplace()'定义? –

+0

我已经更正了现在的代码。 Iam更关注这一行 - nodes [n] .textContent = nodes [n] .textContent.replace(r,changedText); – locknies

+0

您正在设置设置或返回指定节点及其所有后代的文本内容的文本内容。 ,我想你应该为innerHTML,如果你想注入的HTML元素 – Deep

回答

0

您使用textContent将改变文本,而不是HTML内容,尽量用innerHTML而不是textContent

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

希望这将有助于。

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

已经试过了。但不工作!我将提供一个完整的代码示例。 – locknies

+0

请检查我的更新。 –

+0

让我检查一下。其实iam试图写一个'铬扩展'插件,当我尝试执行此操作时,它不起作用,但它不显示任何错误。 – locknies