来自完整HTML文档的jQuery对象

时间:2010-11-11 14:55:19

标签: jquery dom

是否可以将完整的HTML文档解析为完整的jQuery对象?当我尝试时,例如

var $tmp = $("<html><head><title>title</title></head><body><p id='test'>test</p></body></html>");
console.log($tmp);

我明白了:

[+] [title, p#test] []

即。一个阵列,将所有头部的孩子与所有身体的所有孩子组合在一起。是不是可以保留结构,包括html,head和body元素?

3 个答案:

答案 0 :(得分:1)

jquery剥离html和body,因为文档中只能有一个html和body。 Brian的答案是你可以得到的最接近的答案,但仅限于非IE浏览器,因为IE不解析非html标签。

例如:

var test = "<test>This is it</test>";
alert($(test).html());  // display This is it in non IE browser (working in 8-9?).

编辑: 如何用div class = html / body替换html和body?

var test = "<html><body><div>this is a test</div></body></html>";
test = test.replace(/(\/body|\/html)/i, "\/div")
           .replace(/html/i, "div class='html'")
           .replace(/body/i, "div class='body'");
console.log($(test));

答案 1 :(得分:0)

我认为jQuery使用浏览器的原生innerHTML来创建那种情况下的元素。因此,某些浏览器允许它,而其他浏览器则不允许。我认为它适用于Firefox,但不适用于IE。

也许您可以尝试使用原生document.createElement()将它拼凑在一起。不确定它是否会起作用。

答案 2 :(得分:0)

一种破解方法是将'html'节点用“html”这个词替换为字符串。

var tmp = '<html><head><title>title</title></head><body><p id="test">test</p></body></html>';
tmp = tmp.replace(/html/g, 'html1');
console.log($(tmp));

我不确定我真的喜欢这个想法虽然......