javascript 替换无法使用“<”

javascript replace fails to work with "<"

我正在尝试使用 javascript 的替换功能替换字符串中的 "<"">"。我是这样使用它的:

<html>
<body onload="myFunction()">
<p id="demo">#include <iostream></p>

<script>
function myFunction() {
    var str = document.getElementById("demo").innerHTML; 
    var res = str.replace(/</g, '&lt; ').replace(/>/g, '&gt; ');
    document.getElementById("demo").innerHTML = res;
}
</script>

</body>
</html>

我希望输出为 "#include <iostream>",但相应的 </iostream> 附加到所需的输出。

这是怎么回事?我该如何避免这种行为?

因为您的 html 中有 <iostream>,它在您的浏览器中被解释为一个标签,它添加了一个额外的结尾 </iostream>。看起来好像您正在尝试使用 JS 对其进行转义,但为时已晚,因为您的浏览器正在加载 javascript 之前的 html,并添加了额外的结束标记。在你的 html 中转义它以避免额外的结束标记被附加行为:

<p id="demo">#include &lt;iostream&gt;</p>

I just want to automate the replacement of "<" and ">" with &lt; and &gt; respectively. @rioc0719: I don't want to do manual replacement.`

不要尝试用 JS 来做这件事。得到一个为你做的 IDE。地狱,制作一个服务器端脚本来为你做这件事;只是 不要为此使用 JS 这种客户端语言

2 个回答问题

  • 带有 "innerHTML" 的自动关闭标签:找到 Javascript - .innerHTML changes auto close tags
  • 替换“<”和“>”使用 textContent

<html>
<body onload="myFunction()">
<p id="demo">#include <iostream> </p>


<script>
function myFunction() {
    var str = document.getElementById("demo").innerHTML; 
    var res = str.replace(/</g, '&lt; ').replace(/>/g, '&gt; ');
    document.getElementById("demo").textContent  = res;
}
 
</script>

</body>
</html>