使jQuery不丢弃某些元素

时间:2013-01-21 02:11:05

标签: jquery dom

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

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

现在,结果对象有点令人失望。 当我使用.html()函数时,我应该将所有内容都放在根元素中。

不幸的是,jQuery丢弃<html><body>&amp; <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 个答案:

答案 0 :(得分:1)

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

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

这将创建一个<html>标记,并将其填充其他元素。

答案 1 :(得分:1)

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

如果您想要所有这些部分,可以创建与iframe不同的内容。

答案 2 :(得分:1)

奇怪的是,这在Chrome和Firefox中都非常有效:

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

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

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

> $('<html></html>')
[<html>​</html>​]
> $('<html><body></body></html>')
[]

答案 3 :(得分:1)

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

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

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