jquery无法通过id找到div

时间:2011-01-09 19:26:44

标签: jquery find

我有一个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);
        }
我错过了什么吗?解决方法有效,只是丑陋。

非常感谢!

2 个答案:

答案 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并查看有关加载网页片段的部分。