2010-11-11 42 views
2

是否可以将完整的HTML文档解析为完整的jQuery对象?当我尝试,例如来自完整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元素?

+0

你为什么要包装htmlwith $符号? – kobe 2010-11-11 15:01:24

+0

@gov - 这就是在jQuery中创建元素的方式。 – user113716 2010-11-11 15:04:36

+0

@patrick,我们可以简单地使用一个字符串concatination并在右端做一个.html。 – kobe 2010-11-11 15:12:09

回答

1

的jQuery剔除了html和身体只能有一个HTML和身体文件内。布赖恩的答案是最接近你可以得到的,但只有在非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 /体取代HTML和身体?

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)); 
+0

你至少可以在** DOM **中创建额外的'html'和'body'元素,至少在某些实现中(只在WebKit中使用'document.createElement'进行测试)。你甚至可以将它们追加到其他元素('element.appendChild')。 jQuery取消了这些功能,因为在开发人员希望这样做的常见使用情况下,这种做法非常罕见,但很常见的是,他们只想将某个服务器响应从Ajax调用转储到某个“div”中。 – eyelidlessness 2010-12-23 09:41:54

+0

@eylidlessness,你是对的,我在FF中测试将第二个body添加到html(不在div内)并且显示第二个body,但是在IE中,不显示第二个body。我想,我会坚持“正确”的HTML构造:)。 – Jules 2010-12-23 23:15:10

0

我认为jQuery使用浏览器的原生innerHTML来创建这种情况下的元素。因此,一些浏览器允许它,其他浏览器则不允许。我认为它会在Firefox中工作,但不是IE。

也许你可以尝试使用本机document.createElement()拼凑在一起。不知道它是否会起作用。

+0

谢谢,帕特里克。在Firefox中没有运气。我真正想要做的只是使用jQuery的核心功能来解析通过AJAX获取的HTML文档。看起来我必须自己做更多的工作...... – 2010-11-11 15:26:54

+0

@Bobby - 不客气。是的,这可能需要一些手动解析,具体取决于你想要达到的目标。 – user113716 2010-11-11 16:07:21

0

一种黑客会将字符串替换为'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)); 

我不知道,虽然我很喜欢想法...