替换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 会变慢?

1个函数独立替换4个不同ID的innerHTML

仅替换具有类突出显示 javascript 的子字符串

如何使用javascript替换innerhtml中的值

document innerHTML 怎样解决 代码不替换 重复增加问题。

模板引擎原理