2012-02-02 83 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

相关问题