以前,当我需要操作字符串中某些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 标签有一个带有无效结束标签的样式标签,所以我不知道它在考虑的所有浏览器中如何工作。
(抱歉,还没有工作示例。我今天早上有点忙,但我只是想把这个想法放在那里)。