如何正确替换 <pre> 元素的内容

How To Properly Replace The Content of a <pre> Element

如何使用jQuery(甚至纯JS)将给定字符串解析为HTML,然后替换生成的[=33]中所有<pre>元素的内容=](没有 encoding/decoding 其中的实体)并将其转换回字符串?

例如,假设我将以下 HTML 存储为字符串:

<p>HTML block</p>
<pre>
<body>
    <h1>Hello World</h1>
    <p>Hi</p>
</body>
</pre>

并且我想将所有 \n 个字符变成 <br/>,这样输出字符串将是:

<p>HTML block</p>
<pre><br/><body><br/><h1>Hello World</h1><br/><p>Hi</p></br></body><br/></pre>

请注意,<pre> 元素中可以包含任何内容,包括其他嵌套元素或脚本。

我尝试使用 $.parseHTML() 但由于某种原因它会去除某些嵌套元素(例如 <pre> 中的 <body>

我知道 RegEx 不是最好的 但我稍后会添加一个 DOM 解决方案假设 string 是你的字符串

string.replace(/(?:\<pre[\S\s]*?\>)([\S\s]*?)(?:\<\/pre\>)/, string.match(/(?:\<pre[\S\s]*?\>)([\S\s]*?)(?:\<\/pre\>)/)[1].replace(/\n/g, '<br/>'));


DOM解析器

var d = (new DOMParser).parseFromString(string, 'text/html');
d.getElementsByTagName('pre')[0].innerHTML = d.getElementsByTagName('pre')[0].innerHTML.replace(/\n/g, '<br/>');

d 类似于 document,您可以将此元素放入 DOM 结构中。


要使其成为字符串,您可以这样做:

var d = (new DOMParser).parseFromString(string, 'text/html'); d.getElementsByTagName('pre')[0].innerHTML.replace(/\n/g, '<br/>');
var newstring = d.body.innerHTML;

这将创建一个新变量,newstring 这是您的结果字符串