使用.html()时,jQuery是否会从字符串中删除一些html元素?

时间:2010-03-21 21:41:13

标签: javascript jquery html string

我有一个包含完整html页面的var,包括head,html,body等。当我将该字符串传递给.html()函数时,jQuery会删除所有这些元素,例如body,html,我不想要的头等等。

我的数据var包含:

<html>
<head>
<title>Untitled Document</title>
</head>
<body>
</body>
</html>

然后我的jQuery是:

// data is a full html document string
data = $('<div/>').html(data);
// jQuery stips my document string!
alert(data.find('head').html());

我需要操作一个完整的html页面字符串,以便我可以返回元素中的内容。我想用jQuery做这个,但似乎所有方法,append(),prepend()和html()都试图将字符串转换为dom元素,这将删除完整html页面的所有其他部分。

还有其他方法可以做到这一点吗?我会很好用另一种方法。我的最终目标是在我的字符串中找到某些元素,所以我认为jQuery最好,因为我已经习惯了。但是,如果它要修剪并删除我的部分字符串,我将不得不寻找另一种方法。

想法?

4 个答案:

答案 0 :(得分:12)

经过几次快速测试后,我觉得这种行为不是由jQuery引起的,而是由浏览器引起的。

您可以轻松验证自己(DEMO http://jsbin.com/ocupa3

var data = "<html><head><title>Untitled Document</title></head><body><p>test</p></body></html>";
data = $('<div/>').html(data);
alert(data.html());

在不同的浏览器中产生不同的结果

Opera 10.10

<HEAD><TITLE>Untitled Document</TITLE></HEAD><P>test</P>

FF 3.6

<title>Untitled Document</title><p>test</p>

IE6

<P>test</P>

所以这与jQuery无关,它是在你在div中插入一个完整的html字符串时剥离一些标签的浏览器。但是你需要逐步完成html()的整个jQuery代码。并且您需要为所有浏览器执行此操作,因为jQuery尝试执行它的工作有几种不同的方式。


对于解决方案,我建议您使用iframe进行调查(可能隐藏)并将iframe内容设置为您拥有的html-string。但请注意,摆弄iframe并以编程方式更改其内容也不是一件容易的事。还有不同的浏览器相关怪癖和时间问题。

答案 1 :(得分:4)

这是一个解决方案,其中包括正文,头部和其他属性: mydoc = document.getElementById('NAME_OF_PREVIEW_FRAME')。contentWindow.document; mydoc.write(HTML_CODE); mydoc.close();

答案 2 :(得分:2)

不,jQuery html函数只是将字符串发送到元素的innerHTML属性,该属性是浏览器的一个函数,它告诉它将HTML解析为DOM元素并将它们添加到页面。

您的浏览器不能将页面用作HTML数据,它可以用作DOM并导入/导出HTML。

JavaScript非常好Regular Expression support。根据任务的复杂程度,您可能会发现这是处理数据的最佳方式。

答案 3 :(得分:0)

不需要容器div。

你试过这个吗?:

var foo = $(data);  // data is your full html document string

然后你就可以在里面搜索:

$('.someClass', foo); // foo is the document you created earlier

<强>更新

正如另一个回答提到的,这将如何起作用归结为浏览器。

我稍微查看了jQuery docs,发现了这个:

  

当HTML比a更复杂时   单个标签没有属性,因为它   在上面的例子中,实际的   元素的创建由。处理   浏览器的innerHTML机制。   具体来说,jQuery创建了一个新的   <div>元素并设置innerHTML   HTML元素的属性   传入的片段。

因此,当您使用整个html文档作为字符串时,它与使用innerHTML设置div的{​​{1}}属性没有什么不同。