我有一个包含完整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最好,因为我已经习惯了。但是,如果它要修剪并删除我的部分字符串,我将不得不寻找另一种方法。
想法?
答案 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}}属性没有什么不同。