ajax响应的JQuery find()方法返回null

时间:2014-12-11 19:00:55

标签: jquery ajax

我的ajax请求有问题:

    $.ajax({
        url: sAjaxPageUrl,
        context: document.body,
        dataType: "html",
        success: function(data) {

                    var response = $(data).find("#content").html();

                    response = "<div class=\"popupInner2\"><form action =\"#\" class=\"calledForm\" method=\"post\">"+response+"</form></div><span class=\"clear\">&nbsp;</span>";
                                    $(this).easyPopup({
                                        sHtml: response
                                    })
                                    submitForm();


        }
    });

加载的页面是:

<html>
<style type="text/css">
    body {background:url('images/content/logo_exclamation.jpg') no-repeat scroll 0 35px #dfe0e2;}
    #content {padding-left: 126px;padding-top: 15px;}
    #paragraph {color:#314395;font:14px/1.3em Arial;width:auto;margin: 7px 0 0;}
    #intro {color:#314395;font:18px Arial;margin-bottom: 0;}
    #thirdPartyCookies {padding-right: 10px;}
</style>
<head></head>
<body>
<div id="thirdPartyCookies">
    <div id="content">
        <p id="intro">
            This feature has been disabled.
        </p>
        <p id="paragraph">We are unable to show what's missing here.<br>
        You can change this easily in your <a href="/cookies_settings/cookies_settings.aspx" target="_blank">Cookie settings</a>.
        </p>
    </div>

</div>

</body>


</html>

这有效,但我想加载thirdPartyCookies div,当我写$(data).html()时,它返回null ... (简而言之,我不需要添加find(),因为我已经“开启”了这个好元素。

先谢谢你的帮助......

2 个答案:

答案 0 :(得分:1)

问题在于,在使用jQuery解析html时,<body><head><html>标记被剥离(出于不明原因)和您尝试的元素达到(id="thirdPartyCookies")位于对象的根部。

.find()只搜索后代,所以由于你的元素在根目录中,它永远不会找到它。我有2条建议。

您可以使用.filter()来获取元素:

$(data).filter("#thirdPartyCookies").html();

但如果您的HTML稍后更改并且#thirdPartyCookies是其他内容的子项,那么这将无效。

要使其工作无论您的HTML是什么,请创建一个新的div并将您的内容插入其中。然后,您可以.find您的元素:

$('<div>').html(data).find("#thirdPartyCookies").html();

答案 1 :(得分:0)

试试这一行。

var response = $(data).find('#thirdPartyCookies')[0].outerHTML;