无法从ajax响应中获取body元素

Cannot get body element from ajax response

本文关键字:获取 body 元素 响应 ajax      更新时间:2023-09-26

响应是一个HTML文档(来自链接的href请求)

 var data = $(response).find('body').html();
 alert(data);  
 // I get a alert with nothing...

完整代码:

     $.ajax({
       url: $(this).attr('href'),
       type: 'GET',      
       success: function(response){
         var data = $(response).find('body').html();
         alert(data);  
        }
     });

试试这样做:

var $dom = $(document.createElement("html"));
$dom[0].innerHTML = response;
var $body = $dom.find("body");

使用这段复杂的代码;)

   /*this will get the body content and head by replacing them with div before placing them inside the jQuery factory witch will avoid all bugs, i used this while creating the ajaxit jquery plugin :) */
$.ajax({
                type: "GET",
                url: $(this).attr('href'),
                async:true,
                error:function (event, request, options, error) {
                    if (ajaxItMain.onError){
                        ajaxItMain.onError(event,request,options,error);
                    }
                },
                success:  function (data) {
                    // ----------------- < data >
                    // clearing CDATA
                    data=data.replace(/'<'!'[CDATA'['/'/'>'<'!'-'-/gi,'');
                    data=data.replace(/'/'/'-'-'>'<'!']']'>/gi,'');
                    // extracting the the head and body tags
                    var dataHead = data.match(/<'s*head.*>['s'S]*<'s*'/head's*>/ig).join("");
                    var dataBody = data.match(/<'s*body.*>['s'S]*<'s*'/body's*>/ig).join("");
                    var dataTitle = data.match(/<'s*title.*>['s'S]*<'s*'/title's*>/ig).join("");
                    dataHead  = dataHead.replace(/<'s*head/gi,"<div");
                    dataHead  = dataHead.replace(/<'s*'/head/gi,"</div");
                    dataBody  = dataBody.replace(/<'s*body/gi,"<div");
                    dataBody  = dataBody.replace(/<'s*'/body/gi,"</div");
                    dataTitle = dataTitle.replace(/<'s*title/gi,"<div");
                    dataTitle = dataTitle.replace(/<'s*'/title/gi,"</div");

                    // comments
                    var commentPattern = /'<'!'-'-(['s'S]*?)'-'-'>/ig;
                    // get head comment tags
                    var headComments = dataHead.match(commentPattern);
                    // get body comment tags
                    var bodyComments = dataBody.match(commentPattern);
                    // head - body - title content
                    var $dataHead    = $(dataHead);
                    var $dataTitle   = $(dataTitle);
                    var $dataBody    = $(dataBody);
                }
            });
        }

将一个代表整个HTML文档的字符串传递给jQuery工厂,将得到一个包含该字符串中许多标记的集合,而不是一个代表整个页面的元素。

您需要从标记中创建一个DOM文档,并将其传递给jQuery。

作为初学者,您可以尝试告诉$.ajax您希望返回XML,以便它为您解析为DOM文档。但是,生成的DOM文档不允许对其调用.html()等方法,因为它不被视为HTML。