javascript - <pre> 标签在 IE 中设置 innerHTML 时丢失换行符

标签 javascript html css internet-explorer

我正在使用 Prototype 的 PeriodicalUpdater 用 ajax 调用的结果更新一个 div。据我了解,div 是通过设置其 innerHTML 来更新的。

div 包裹在 <pre> 中标签。在 Firefox 中,<pre>格式按预期工作,但在 IE 中,所有文本都在一行中结束。

这是找到的一些示例代码 here这说明了问题。在 Firefox 中,abcdef 在不同的线路上;在 IE 中它在同一行。

    <html>
    <head>
      <title>IE preformatted text sucks</title>
    </head>
    <body>
      <pre id="test">
        a b c
        d e f
      </pre>
      <script type="text/javascript"><!--
      var textContent = document.getElementById("test").innerText;
      textContent = textContent.replace("a", "<span style=\"color:red;\">a</span>");
      document.getElementById("test").style.whiteSpace = "pre";
      document.getElementById("test").innerHTML = textContent;
      --></script>
    </body>
    </html>

有人知道解决这个问题的方法吗?

最佳答案

设置 innerHTML 会启动一个 HTML 解析器,它会忽略多余的空格,包括硬回车。如果您更改方法以在字符串中包含

 标记,它可以正常工作,因为 HTML 解析器保留了硬返回。

您可以在运行示例页面后通过查看生成的源代码来查看实际情况:

<PRE id="test" style="WHITE-SPACE: pre"><SPAN style="COLOR: red">a</SPAN> b c d e f </PRE>

这里可以看到硬回车不再是

标签内容的一部分

关于javascript - <pre> 标签在 IE 中设置 innerHTML 时丢失换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/451486/

相关文章:

html - 当父级使用 flex 且元素没有内容时,Flex 子级在容器上增长

javascript - 如何将用户 session 保存在 PHP 中的变量中以便在 JavaScript 中引用

javascript - 如何选择特定数量的按钮并在选择后更改所选按钮的颜色

html - 将 JPG 转换为 HTML

javascript - 如何创建并正确调度AudioBufferSource节点?

javascript - 相对定位的 div 重叠 - 共享同一行像素

jquery - 从下拉列表中选择选项时更改所有 div 内容

css - 菜单不会溢出

javascript - Websocket 服务器在多人游戏中存在大量延迟

javascript - 将数据库生产密码放在 json 配置文件中