Javascript jQueryHTML返回null

Javascript jQueryHTML返回null,javascript,jquery,Javascript,Jquery,我正试图下载一个网页并提取尸体 鉴于我有以下代码: $.ajax({ url: someAccessiblePublicUrlOnSameWebServer, dataType: 'html', success: function (data) { //data is correct at this point var body = $(data).find('body').html(); //body is null.

我正试图下载一个网页并提取尸体

鉴于我有以下代码:

$.ajax({
    url: someAccessiblePublicUrlOnSameWebServer,
    dataType: 'html',
    success: function (data) {
        //data is correct at this point

        var body = $(data).find('body').html();

        //body is null. why ?
    }
});

调用success,数据包含预期的html,但正文始终为null。为什么?

可能是你的打字错误

$.ajax({
    url: someAccessiblePublicUrl,
    dataType: 'html',
    success: function (data) {
        var body = $(data).find('body').html();

    }
});
你是说:

var body = $(data).find('body').html();

请注意正文周围的单个记号。

可能是您的输入有误

你是说:

var body = $(data).find('body').html();

请注意正文周围的单个记号。

除非是打字错误,否则在find方法中正文周围需要引号

IE:var body=$data.find'body.html


这可能是你的问题。

除非是打字错误,否则你需要在find方法的正文周围加引号

IE:var body=$data.find'body.html


那可能是你的问题。

更正我上次的回答

检查这个线程

用这个,我想这会有用的


var body=$body,$data.html

更正我上次的回答

检查这个线程

用这个,我想这会有用的


var body=$body,$data.html

如果您通过Ajax调用加载HTML,它将始终以字符串形式返回数据,因此您将无法将普通jQuery选择器应用于响应。如果将数据转换为$data,您也将无法访问body,因为$data是jQuery内部clean方法剥离的body内容的集合。根据您希望对结果执行的操作,您有几个选项:

如果只想将加载的html正文附加到文档中的某个位置,可以执行以下操作:

$.get('http://your_url', function(data) {

                    $('.result').html(data);

                });
这将只将正文内容加载到.result容器中。如果要进行任何进一步的处理,可以从那里访问选择器

如果您只想操纵未附加的片段,那么可以使用filter&get访问它的元素

$(data).filter('p').get() //will get all para DOM nodes
$($(data).filter("#test2").get()).text() //will get text of one specific dom node
另一个选项是,如果您想处理正文中的数据,那么将其作为XML处理可能会更快—对于XML处理,请参阅。 以你的例子来说,可能是这样的:

 $.ajax({
                        url : "http://mypage",
                        dataType : 'xml', //change dataType to XML
                        success : function(data) {
                            //data is correct at this point
                            $(data).find('html').each(function() {
//here you can find whatever you want                               
a = $(this).find("body")
                                console.log(a);

                            })
                        }
                    })

如果您通过Ajax调用加载HTML,它将始终以字符串形式返回数据,因此您将无法将普通的jQuery选择器应用于响应。如果将数据转换为$data,您也将无法访问body,因为$data是jQuery内部clean方法剥离的body内容的集合。根据您希望对结果执行的操作,您有几个选项:

如果只想将加载的html正文附加到文档中的某个位置,可以执行以下操作:

$.get('http://your_url', function(data) {

                    $('.result').html(data);

                });
这将只将正文内容加载到.result容器中。如果要进行任何进一步的处理,可以从那里访问选择器

如果您只想操纵未附加的片段,那么可以使用filter&get访问它的元素

$(data).filter('p').get() //will get all para DOM nodes
$($(data).filter("#test2").get()).text() //will get text of one specific dom node
另一个选项是,如果您想处理正文中的数据,那么将其作为XML处理可能会更快—对于XML处理,请参阅。 以你的例子来说,可能是这样的:

 $.ajax({
                        url : "http://mypage",
                        dataType : 'xml', //change dataType to XML
                        success : function(data) {
                            //data is correct at this point
                            $(data).find('html').each(function() {
//here you can find whatever you want                               
a = $(this).find("body")
                                console.log(a);

                            })
                        }
                    })

这是你的真实代码吗?您正在将空的body变量传递给.find。如果数据是整个HTML文档,则在某些浏览器中查找元素时会遇到问题。这可能是您的实际代码的副本吗?您正在将空正文变量传递给.find。如果数据是整个HTML文档,在某些浏览器中查找元素时,您会遇到问题。我修复了该类型的可能重复项,但仍然存在相同的问题。您确定resultdata变量中有标记吗?我修复了该类型,但仍然存在相同的问题。您确定resultdata变量中有标记吗?修复了该类型。仍然有同样的问题。@Christofjan很奇怪。我明白问题所在。我找到了一个变通方法,使用var contents=$data.contents var body=contents[1],当然这取决于页面的结构xhtml。修复了类型。仍然有同样的问题。@Christofjan很奇怪。我明白问题所在。我找到了一个解决方法,使用var contents=$data.contents var body=contents[1],当然这取决于页面xhtml的结构。我修复了拼写错误,但仍然存在相同的问题。我修复了拼写错误,但仍然存在相同的问题。