在 innerHTML 输出中插入新行

Inserting new lines into innerHTML output

如果我要为变量设置一个字符串 var text = "Hello World!" 并且我想在 Hello 一词后换行,我知道我可以创建一个新变量 var b = text.replace(" ", "\n"); 和 console.log(b) 将分两行显示文本。 (我也知道有多种方法可以在不使用替换方法的情况下执行此操作)。

但我有一堆来自 document.getElementById("div").innerHTML 的文本 returns 一堆脚本和 img 以及更多 div 标签等. 当它写这个的时候,它根本没有做任何间距,只是把所有的字符都挤在一起,在一行中尽可能多的字符。

有什么方法可以打印出 document.getElementById("div").innerHTML 的内容,以便在每个标记结束后 </script> </img>等,它会创建一个新行以便于阅读? 我尝试对 (">",">\n") 进行替换,但没有做任何事情,我假设是因为 innerHTML 的格式,而不是我假设的文本字符串。

替换 js 命令只是替换第一个字符,试试这个:

str.replace(/>/g, "><br>");

获取正确的节点并改为执行此操作:

var b = text.replace(/\s+/, '<br />');

HTML 将新行和白色 space 视为单个白色 space。当然,如果您只是希望文本易于用户准备,并且您已经知道内容是什么,<pre></pre> 可能是您的朋友。

替代.innerHTML

.textContext 并不完美,但您可以在这种情况下很好地使用它:

var text = document.getElementById("div").textContent;


解决方案

换行:

text.replace(/(img\/|script)\>/ig, '>\n')


有休息时间:

text.replace(/(img\/|script)\>/gi, '>\<br/>')


正则表达式

(            <- Start capturing group
    img\/    <- Select img\
    |        <- OR
    script   <- Select script
)
\>           <- Matches > character


g 是全局修饰符。 i 是不区分大小写的修饰符。字符串中的 替换捕获组。