jquery html returns null

jquery html returns null

本文关键字:null returns html jquery      更新时间:2023-09-26

我正在尝试下载一个网页并提取正文。

给定我有以下代码:

$.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并且data包含期望的html,但是body始终为null。为什么?

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

这可能是因为你有一个打字错误。

你的意思是:

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

注意身体周围的单个记号。

如果您通过Ajax调用加载HTML,它将始终以字符串形式返回数据,因此您将无法将普通的jQuery选择器应用于响应。如果您将数据转换为$(data),您也将无法访问主体,因为$(data)是主体内容的集合(通过jQuery内部clean()方法剥离)。根据你想对结果做什么,你有几个选择:

如果你只想把加载的html的正文附加在文档的某个地方,你可以这样做:

$.get('http://your_url', function(data) {
                    $('.result').html(data);
                });

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

如果你只想操作未连接的片段,你可以使用filter&收到

$(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处理,请参阅http://think2loud.com/224-reading-xml-with-jquery/.用你的例子来说,它会是这样的:

 $.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);
                            })
                        }
                    })

除非是拼写错误,否则需要在find方法中的"body"周围加引号。

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

这可能是你的问题。

对我上次响应的更正。

使用jquery 查看此线程解析html字符串

使用它,我认为这将工作

var body=$("body",$(data)).html();