jquery无法通过id找到div

ste*_*eve 2 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;
        }
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)

我错过了什么吗?解决方法有效,只是丑陋.

非常感谢!

use*_*716 7

如果'#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)

......但我不保证结果.