2012-02-01 73 views
0

在$ .ajax成功回調函數中返回的HTML不允許我將它放入jQuery包裝器中,並對其應用標準jQuery方法。爲什麼是這樣?例如,這提醒空:

dataType: "html", 
success: function(myHTML) { 
    var $myHTML = $(myHTML); 
    alert($myHTML.html()); // returns null 
} 

我的目的是修改MYHTML使用jQuery方法(這就是爲什麼我需要把它放在jQuery的包裝),然後返回修改後的HTML(飽滿,包括<head> ,腳本等)作爲一個字符串。但我嘗試使用$(myHTML)的jQuery方法都不行。怎麼來的?

代碼的工作版本是在這裏:http://jsfiddle.net/supertrue/Uw5dc/

var getHTML = function (url){   

     $.ajax({ 
        url: url, 
        dataType: "html", 
        success: function(myHTML) { 

         // view the returned HTML 
         alert('Successfully grabbed this HTML: \n\n' + myHTML); 

         // the opening <html> tag is missing (no idea why) 
         myHTML.replace('<head>', '<html><head>'); 

         // put it in a jQuery wrapper 
         var $myHTML = $(myHTML); 

         // use jQuery to manipulate it 
         // $myHTML.find('script').remove(); // just an example 

         // then view the final html 
         alert('$myHTML.html(): \n\n' + $myHTML.html()); // doesn't work! 

         // that didn't work; try getting outerHTML 
         $myHTML = $('<div></div>').append(myHTML); 
         alert('$myHTML.html(): \n\n' + $myHTML.html()); // highly incomplete! missing scripts and <head>, <body> wrappers  

        } 
       }); 

    } 

回答

0

jQuery方法here(向下滾動到一部分jQuery(html[, ownerDocument]))的文檔,它說這個:

當傳遞複雜的HTML時,一些瀏覽器可能不會生成完全複製所提供的HTML源代碼的DOM。如前所述,我們使用瀏覽器的.innerHTML屬性來解析傳遞的HTML並將其插入到當前文檔中。在此過程中,某些瀏覽器會過濾掉某些元素,如<html>,<標題>或<頭>元素。因此,插入的元素可能不能代表傳遞的原始字符串。

鑑於此,它不可能你要能夠生成整個頁面(即包括<html>和標籤那樣)使用$(html),只有那些與它是如何工作的兼容配件(如標籤,你通常會在<body>內使用應該可以正常工作)。

相關問題