2012-02-02 63 views
0

基本上我有一些文字可能包含HTML標籤,但也可能包含非HTML編碼字符。我如何HTML編碼可能有html標籤的文本,而不使用Javascript編碼標籤本身

var doc = window.document.implementation.createDocument 
    ('http://www.w3.org/1999/xhtml', 'html', null); 
var text = '<head><script>somejs</script>' + 
     '<script>var x = 7; var y = 5; var foo = x < y;</script>' + 
     '</head><body></body>'); 

我希望將文本設置爲元素innerHTML屬性。如果我只是做

doc.getElementsByTagName('html')[0].innerHTML = text; 

這將導致一個INVALID_STATE_ERR:因爲X和Y之間的小於號的DOM異常11。

但是,如果我的HTMLEncode可變文本,我得到

&lt;head&gt;&lt;script&gt;somejs&lt;/script&gt;&lt;script&gt;var x = 7; var y = 5; var  foo = x &lt; y;&lt;/script&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt; 

就這樣我失去了我需要的元素表現得所需,一旦它的innerHTML已設置的所有標籤。是否有任何標準的方法來對字符串中所有標籤的內容進行編碼,而無需對標籤本身進行編碼?

+0

使用'escape'和'unescape'來得到你的結果。 – 2012-02-02 20:53:14

+0

不幸的是,如果我然後想要做一些像doc.getElementsByTagName('腳本')的東西,我不會得到任何東西,因爲組成腳本標籤的< and >已經被轉義了。 – asutherland 2012-02-02 20:59:44

回答

0

對於內聯腳本you need to escape the string </script when followed by a space character, >, or /, else it would close the respective opening tag

因此,而不是</script>,您可以使用<\/script>。這工作:

var text = '<head><script>somejs<\/script><script>var x = 7; var y = 5; var foo = x < y;<\/script></head><body></body>'; 
el.innerHTML = text; 

更新:現在你已經修改了你的問題,我看你使用XHTML!這解釋了它 - innerHTML在XHTML中不起作用。

+0

我編輯了我的問題以顯示我的實際用例,對不起,我一開始並不清楚。對於我來說,在上述情況下,即使我看到正斜槓,仍然會收到INVALID_STATE_ERR。但是,如果我將'x asutherland 2012-02-02 20:42:23

+0

@ user959986如果你想轉義'<'字符,[你可以](http://mothereff.in/js-escapes#0%3C),但它不應該是必要的。 – 2012-02-02 20:56:52

+0

啊,我的壞:/我有點小菜。我並不在乎我使用的是什麼。我希望能夠稍後調用var scripts = doc.getElementsByTagName('script'),然後通過腳本[0] .innerHTML獲得'somejs';任何方式使這項工作?基本上我只想從變量文本中提取一對標籤之間的所有javascript代碼。 – asutherland 2012-02-02 21:11:46