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

web*_*.ic 5 html javascript string parsing domparser

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

我将其解析HTML stringDOMusing DOMParser().parseFromString(),因为我想更改innerHTML某些特定elements. 这就是为什么我parseHTML stringDOMgetElementByClassName我通过他们让我的所有元素,并循环改变它innerHTML。到目前为止,这有效。

更改后innerHTML,我尝试将新的转换DOMstring. 我无法弄清楚如何。我尝试的是将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
Run Code Online (Sandbox Code Playgroud)

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

我总是得到undefined。我怎样才能将它解析回 a string?我发现了很多带有innerHTMLor 的例子outerHTML,但就我而言,出了点问题。有任何想法吗?

Cer*_*nce 11

DOMParser 总是会给你一个文档作为回报。文档没有innerHTML属性,但有属性,document.documentElement就像在页面的普通document对象中一样:

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

请注意,如果您自己不传递这些标签,则会为您创建一个<head><body>。如果你只想要身体,那么:

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