2015-03-31 21 views
-1

我想要使用createTextNode()方法转义从textarea中获取的字符串。将TextNode附加到textarea不起作用。javascript textarea createTextNode()

function myFunc(){ 
    var str = document.getElementById("tarea").value; 
    var chld = document.createTextNode(str); 
    var prnt = document.getElementById("tarea"); 
    prnt.appendChild(chld); 
} 
+0

我正在exxting转义字符串。例如:<html> for – Msch 2015-03-31 16:25:21

+0

对不起。什么都没发生。我在textarea中输入,按下触发该功能的按钮,但textarea的值(即)保持不变。 – Msch 2015-03-31 16:37:07

+0

通过上面的代码,你会看到文本的变化(至少在Chrome上,我没有尝试过跨浏览器)。你不会看到你想说什么,但你会看到文本被追加。 – 2015-03-31 16:38:09

回答

0

如果你想拥有的浏览器为你做的工作逃避,我可能会使用该临时的元素,那么使用它的innerHTML作为参数createTextNode

function myFunc(){ 
 
    var prnt = document.getElementById("tarea"); 
 
    var str = prnt.value; 
 
    var div = document.createElement('div'); 
 
    div.appendChild(document.createTextNode(str)); 
 
    prnt.appendChild(document.createTextNode(div.innerHTML)); 
 
} 
 
myFunc();
<textarea id="tarea">Testing & < ></textarea>

但极少逃脱HTML是很简单的,你不一定需要去全猪:

str = str.replace(/&/g, "&amp;").replace(/</g, "&lt;"); 

(无需>,这很好,因为它是你一个标签内不是。)

如:

function myFunc(){ 
 
    var prnt = document.getElementById("tarea"); 
 
    var str = prnt.value; 
 
    str = str.replace(/&/g, "&amp;").replace(/</g, "&lt;"); 
 
    prnt.appendChild(document.createTextNode(str)); 
 
} 
 
myFunc();
<textarea id="tarea">Testing & < ></textarea>


注意,这两个那些追加,因为这就是你的代码试图做的;他们不用替换的内容textarea。如果要这样做,请在追加文本节点之前将其value设置为""

+0

有了上述功能,我仍然看不到浏览器完成的转义工作。也许我误解了createTextNode()这样做。我想启用用特殊字符的用户输入并阻止XSS。 – Msch 2015-03-31 16:52:10

+0

@Msch:再看一下,上面的工作。文本区域的初始内容是“测试&< >”。然后,该函数会附加'测试& <>'。 (追加= **添加**结束,而不是替换,请参阅我在回答结束时的注释。) – 2015-03-31 16:57:21