我有一个ajax调用,我正在尝试解析#viewport的返回页面,从而删除返回页面的页眉和页脚。但是find()找不到div。
我原来的功能:
function(event) {
$.ajax({
type: this.method,
url: this.action,
data: $(this).serialize(),
datatype: "html",
success: function(data) {
alert(data);
var respHTML = $(data).find("#viewport");
alert(respHTML.length);
$("#contacts_sidebar").html(respHTML);
}
});
return false;
}
警告(数据)中的,我肯定会看到<div id="viewport">
,但是alert(respHTML.length)
显示0.如果我将选择器更改为“table.someclass”,它会找到它。但是诸如“head”和“body”之类的选择器也会返回0。
我知道肯定有b / c我用以下解决方法替换成功处理程序:
success: function(data) {
var respHTML;
var d=$(data);
for (i=0; i<d.length; i++) {
if (d[i]["id"] === "viewport") {
respHTML = d[i]["innerHTML"];
break;
}
}
$("#contacts_sidebar").html(respHTML);
}
我错过了什么吗?解决方法有效,只是丑陋。
非常感谢!
答案 0 :(得分:7)
如果'#viewport'
位于回复HTML的顶层,则您需要.filter()
,因为.find()
只能在里面看顶级元素
success: function(data) {
alert(data);
var respHTML = $(data).filter("#viewport");
alert(respHTML.length);
$("#contacts_sidebar").html(respHTML);
}
将HTML传递给jQuery时,您不能依赖于以跨浏览器方式查找<html>
<head>
<body>
标记。
如果您的回复确实包含整个HTML文档,我会尽可能地将其缩小到您实际想要的内容。
另一种选择可能是做这样的事情:
var respHTML = $('<div>' + data + '</div>').find("#viewport");
......但我不保证结果。
答案 1 :(得分:2)
您可以使用.load()函数来解析特定元素的返回页面。
查看http://api.jquery.com/load并查看有关加载网页片段的部分。