2010-05-20 84 views
1

有沒有辦法使用jQuery.html()而不是鬆散的腳本和樣式?或任何其他非jQuery的方式?jQuery.html()刪除腳本和樣式

我試圖輸出用戶所在頁面的完整HTML。這甚至有可能嗎?

+0

我不知道我是否完全理解你。如果您不想丟失腳本和樣式,而您似乎只想修改body標籤的內容。是對的嗎?或者您想要將新的腳本和樣式添加到頭部?在這種情況下,您應該在獨立功能上註冊樣式和腳本。然後追加你的身體內容。你甚至可以用JS動態設置doctype和一切。所以它應該都很好 – XGreen 2010-05-20 11:59:47

+0

你使用什麼瀏覽器? – 2010-05-20 12:08:14

回答

2

jQuery.html()刪除腳本和樣式

那不是我的經驗(見下文)。在實踐中,您必須意識到,通過查詢HTML字符串獲取的DOM總是會被解釋爲 HTML,而不是原始的,並且會出現怪癖(例如,在IE上,所有的HTML標記名字是大寫)。這是因爲jQuery的html函數依賴於瀏覽器的innerHTML屬性,該屬性在瀏覽器和瀏覽器之間略有不同。但下面的演示包括Chrome 4,IE7和Firefox 3.6上的樣式和腳本標籤;我沒有嘗試別人,但我希望他們沒事。

如果你想獲得外部鏈接的網頁,以及內聯內容的內容,你自然會對解析結果,並按照src(上script S),href(上link S作rel = 「樣式表」),等等

演示:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 
<title>Test Page</title> 
<style type='text/css'> 
body { 
    font-family: sans-serif; 
} 
</style> 
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'></script> 
<script type='text/javascript'> 
(function() { 
    $(document).ready(pageInit); 

    function pageInit() { 
     $('#btnGo').click(go); 
    } 

    function go() { 
     alert($('html').html()); 
    } 
})(); 
</script> 
</head> 
<body> 
<input type='button' id='btnGo' value='Go'> 
</body> 
</html> 
0

我看到2種情景這裏

  1. 您使用jQuery.html(yourHTML)覆蓋整個頁面的html,所以即使腳本標籤被覆蓋...
  2. 您使用jQuery.html()檢索整個文檔html。如果是這種情況,你需要確保使用.html()函數的元素是整個html ......就像T.J.克羅德建議$('html').html()