2015-03-31 25 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