我正在尝试使用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窗口对象吗?
答案 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>
节点。