2011-10-26 144 views
0

可能重複:
Get selected element's outer HTML有沒有辦法讓父母的.html()?

我有這樣的代碼:

<html> 
    <head></head> 
    <body></body> 
</html> 

$('html').html()我只得到:

<head></head> 
    <body></body> 

我怎樣才能得到整個代碼?我的意思是,我也使用元素的父母.html() ...

+0

一方面,從技術的角度來看,這似乎是一個有趣的問題,但另一方面:爲什麼要用''來做這個?對於我見過的95%的網頁,您只需說出「」+ $(「html」)。html()+「」'。 – nnnnnn

回答

1

黑客攻擊的一位:

$('<div />').html($('html').clone()).html(); 

可能與頁面上有許多HTML的舊版本瀏覽器慢,因爲它有克隆整個事情。

編輯:如果你想要一個jQuery的功能,這樣做,只寫一個:

$.fn.outerHtml = function (a) { 
    if (a) { 
     a = $(a).insertBefore(this); 
     this.remove(); 
     return a; 
    } 
    return $('<div />').html($('html').clone()).html(); 
}; 

然後,只需調用$('html').outerHtml()

0

我認爲有很多方法,例如, jQuery("html")[0].outerHTML;jQuery("html").attr("outerHTML");

編輯:這不是跨瀏覽器,我忘記了。 Firefox不支持這一點。有(克隆)黑客的。

編輯:有關FF支持,請參見How do I do OuterHTML in firefox?

+0

'outerHTML'是僅限IE的。 – BoltClock

0

這個怎麼樣:

$('<div>').append($('html').clone()).remove().html(); 
0

無論如何,如果你正在試圖獲得<html>,它應該是一個正確的文檔中的唯一<html>標籤 - 爲什麼不將它添加手動給它的innerHTML?

2

試試這個jQuery的擴展:

jQuery.fn.outerHTML = function(s) { 
    return (s) ? this.before(s).remove() : jQuery("<p>").append(this.eq(0).clone()).html(); 
} 

你可以這樣調用:

$("html").outerHTML(); 

現金去this page