【问题标题】:Replacing string in innerHTML替换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 示例来展示此问题?

标签: javascript xhtml replace innerhtml


【解决方案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
  • 哦!我刚刚注意到我的数组中有像“类”这样的词,这绝对不会帮助跨度标签中的类属性。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 2012-04-26
  • 2011-12-17
  • 2020-03-08
  • 2011-07-02
相关资源
最近更新 更多