我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
在警报(数据)中,我肯定会看到<div id="viewport">,但alert(respHTML.length)显示0.如果我将选择器更改为"table.someclass",它将找到它.但是诸如"head"和"body"之类的选择器也返回0.
我知道肯定有b/ci用以下解决方法替换成功处理程序:
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);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?解决方法有效,只是丑陋.
非常感谢!
如果'#viewport'是在响应HTML的顶级水平,你需要.filter()代替,因为.find()只能看看里面的顶级元素.
success: function(data) {
alert(data);
var respHTML = $(data).filter("#viewport");
alert(respHTML.length);
$("#contacts_sidebar").html(respHTML);
}
Run Code Online (Sandbox Code Playgroud)
将HTML传递给jQuery时,您不能依赖<html> <head> <body>于以跨浏览器方式查找标记.
如果您的回复确实包含整个HTML文档,我会尽可能地将其缩小到您实际想要的内容.
另一个选择可能是做这样的事情:
var respHTML = $('<div>' + data + '</div>').find("#viewport");
Run Code Online (Sandbox Code Playgroud)
......但我不保证结果.
| 归档时间: |
|
| 查看次数: |
4707 次 |
| 最近记录: |