将 HTML 字符串解析为 DOM 并将其转换回字符串

Parse HTML String to DOM and convert it back to string

我有一个 HTML string 例如'<p><span class="text">Hello World!</span></p>'

我使用 DOMParser().parseFromString() 将此 HTML string 解析为 DOM,因为我想更改某些特定 elementsinnerHTML .这就是为什么我 parse HTML stringDOMgetElementByClassName 我得到所有元素并循环遍历它们以更改它 innerHTML 的原因。这到目前为止有效。

更改 innerHTML 后,我尝试将新的 DOM 转换回 string。我不知道怎么办。我尝试的是将 innerHTMLouterHTML (都尝试过)分配给这样的变量:

const parser = new DOMParser();
const doc = parser.parseFromString("<p>Hello World!</p>", "text/html");
console.log(doc.innerHTML) // undefined
console.log(doc.outerHTML) // undefined

const parser = new DOMParser();
const doc = parser.parseFromString("<p>Hello World!</p>", "text/html");
console.log(doc.innerHTML) // undefined
console.log(doc.outerHTML) // undefined

我总是得到 undefined。我怎样才能将它解析回 string?我发现了很多 innerHTMLouterHTML 的例子,但在我的例子中出了点问题。有什么想法吗?

DOMParser 将始终在 return 中为您提供 文档。文档没有 innerHTML 属性,但是 document.documentElement 有,就像页面的正常 document object:

const myHtmlString = '<p><span class="text">Hello World!</span></p>'
const htmlDom = new DOMParser().parseFromString(myHtmlString, 'text/html');
console.log(htmlDom.documentElement.innerHTML);

请注意,如果您不自己传递这些标签,将为您创建 <head><body>。如果您只想要 body,那么:

const myHtmlString = '<p><span class="text">Hello World!</span></p>'
const htmlDom = new DOMParser().parseFromString(myHtmlString, 'text/html');
console.log(htmlDom.body.innerHTML);