0

我正在尝试使用 jQuery 解析一些 HTML,例如这个简单的示例:

$('<html><body><div><p>Test</p></div></body>')

现在,生成的对象有点令人失望。当我使用 .html() 函数时,我应该得到根元素内的所有内容。

不幸的是,jQuery 丢弃了<html>, <body>&<head>标签。

所以我得到:

$('<html><body><div><p>Test</p></div></body>').html()
"<p>Test</p>"

而不是身体。它将第一个元素视为根元素。

我可以使用这个:

$('<html><body><div><p>Test</p></div></body>')[0].outerHTML
"<div><p>Test</p></div>"

但我仍然没有我想要解析的标签。

那么,我该如何解决呢?我可以以某种方式创建一个新的 jQuery dom 窗口对象吗?

4

4 回答 4

1

我不知道您为什么要使用它,但是针对您的问题的解决方案(不确定是否最好)是使用该方法.append()

$('<html>').append('<body>').append('<div>').append('<p>Test</p>');

这将创建一个<html>标签并用其他元素填充它。

于 2013-01-21T02:17:49.273 回答
1

当您向 jQuery 传递一个 HTML 字符串时,它会创建一个文档片段,而不是整个文档。因此,它不会包含您要询问的部分,例如<body>or <head>

如果你想要所有这些部分,你可以创建一些不同的东西,比如 iframe。

于 2013-01-21T02:19:15.970 回答
1

奇怪的是,这在 Chrome 和 Firefox 中都能完美运行:

$('<html>').html('<html><body><div><p>Test</p></div></body>')

添加<head>标签也不会破坏它。

<body>标签添加到原始选择器后,它将停止工作:

> $('<html></html>')
[<html>​&lt;/html>​]
> $('<html><body></body></html>')
[]
于 2013-01-21T02:19:19.557 回答
1

我很确定 jQuery 不允许你这样做。但是,您可以将文档视为 XML 并以这种方式对其进行解析:

$.parseXML('<html><body><div><p>Test</p></div></body></html>').childNodes[0]

$.parseXML创建一个 XML 文档,并将.childNodes[0]成为<html>节点。

于 2013-01-21T02:27:02.583 回答