替换innerHTML中的字符串
Posted
技术标签:
【中文标题】替换innerHTML中的字符串【英文标题】:Replacing string in innerHTML 【发布时间】:2011-08-22 18:51:45 【问题描述】:所以,这是我正在尝试完成的一件相当简单的事情(javascript),但这需要我很长时间,但它仍然无法正常工作。我正在尝试替换某些单词(在 pre 标签内)。例如,单词"static"
应替换为
"<span class="keyword">static</span>"
。我使用的是严格的 Xhtml。
我的做法是这样的:
for (var j = 0; j < keywords.length; j++)
codeBlock.innerHTML = codeBlock.innerHTML.replace(new RegExp(keywords[j], "g"), "<span class=\"keyword\">" + keywords[j] + "</span>");
codeBlock 是前置元素,keywords 是一个数组,包含我要替换的所有单词。
我尝试了很多方法,但总是遇到这样的错误消息。
火狐:
[异常...“指定了无效或非法字符串”代码:“12”nsresult:“0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)”位置:“file:///C:/.../scripts.js 行: 33"]
铬:
错误:INVALID_STATE_ERR:DOM 异常 11
我猜它与 html 标签有关(我尝试使用 %lt; 和 %gt; 代替),因为我知道这确实有效:
codeBlock.innerHTML = codeBlock.innerHTML.replace(新 RegExp(keywords[j], "g"), "test");
感谢您的宝贵时间, 雅克
【问题讨论】:
我认为您不能将(设置)innerHTML
与 XHTML(严格)一起使用。
您是否有机会发布一个完整的 html 和 javascript 示例来展示此问题?
【参考方案1】:
您需要将代码包装在 CDATA 中
<script type="text/javascript">
//<![CDATA[
for (var j = 0; j < keywords.length; j++)
codeBlock.innerHTML = codeBlock.innerHTML.replace(new RegExp(keywords[j], "g"), "<span class=\"keyword\">" + keywords[j] + "</span>");
//]]>
</script>
Properly Using CSS and JavaScript in XHTML Documents
这样您的代码将不会被解析为 XHTML 有效性。
http://jsfiddle.net/gaby/Y92AE/http://jsfiddle.net/gaby/Y92AE/您当前的代码对我来说很好
【讨论】:
谢谢,不过我的脚本在一个单独的 .js 文件中。好像没什么区别。 @Jacco,你用什么浏览器(和版本)? 谷歌浏览器 11.0.696.65 火狐 4.0.1 哦!我刚刚注意到我的数组中有像“类”这样的词,这绝对不会帮助跨度标签中的类属性。感谢您的帮助。以上是关于替换innerHTML中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
为啥随着 innerHTML 变大,替换 innerHTML 会变慢?