将正确的 html 文档操作为字符串并转换回字符串



以前,当我需要操作字符串中某些html的内容时,我会做这样的事情

$('<div>').html(someHtmlString).find('#name').text("George").end().html()

这适用于 HTML 片段,但在这种特殊情况下,我将 iframe 的内容作为字符串获取 - 因此它是一个表示完整 HTML 文档的字符串,我需要以相同的方式进行操作。这个技巧,甚至只是将字符串包装在jQuery中都不再有效。

这是一个演示问题的 jsbin

html = """
<html>
<head>
  <style>* { box-sizing: border-box; }</style
</head>
<body style="max-height: 750px">
  <style> body { background-color: 'lavender'; }</style>
  <div>
    <p>Hi</p>
    <p id="name">Your Name</p>
  </div>
</body>
</html>
"""
$html = $(html)
$html.find('#name').text("George")
console.log $html.html()

如何解析和操作完整的 html 文档?

请注意,头部可能包含样式元素,正文可能具有我不想丢失的属性。当文档包含 svg 时,我还看到奇怪的序列化。

我并不执意使用 jQuery,如果有另一个库更有意义引入这里

最理智的方法可能是用你的字符串创建一个文档(参见如何使用JavaScript创建文档对象),操纵它(jQuery是否可以操纵它,我不确定,但我认为是这样),然后从中获取你需要的任何内容。 你必须假设html是正确的,或者至少解析成(尽可能相同的)DOM树。 我注意到在您的示例中,head 标签有一个带有无效结束标签的样式标签,所以我不知道它在考虑的所有浏览器中如何工作。

(抱歉,还没有工作示例。我今天早上有点忙,但我只是想把这个想法放在那里)。

最新更新