2011-06-03 15 views
3

爲什麼不能正常工作?jQuery .after不會插入<body>元素

var newbody = "<body><div>hello</div></body>"; 

$("body").remove(); 
$("head").after(newbody); 

畢竟,我得到的是:

</head> 
<div>hello</div> 

我怎樣才能得到它停止下探身體標記?

+0

你爲什麼要做'$(「body」)。remove()'? – thirtydot 2011-06-03 11:39:38

+6

你爲什麼想要解開你的頁面? – BoltClock 2011-06-03 11:41:11

+0

@BoltClock一個HTML頁面的柏拉圖式二元論以前沒有出現過,但它絕對令人不安... – lonesomeday 2011-06-03 11:42:55

回答

5

這是因爲jQuery的HTML插入功能如何與before()after()工作。 IIRC,他們創建一個臨時元素並設置新創建的元素的innerHTML,然後將元素傳遞到它們應該在的位置。由於<body>標記只能是<html>元素的子元素,因此主要瀏覽器會將其從源代碼中移除。但是,當您將元素附加到<html>元素時,應該暗示新的<body>元素。

如果你不確定,你可以使用標準的DOM功能createElement()創造主體和使用append()的元素添加作爲html()孩子:

var newbody = document.createElement("body"); 
$(newbody).html("<div>hello</div>"); 
$("body").remove(); 
$("html").append(newbody); 

工作演示:http://jsfiddle.net/3dSN4/ (顯示它與類名稱一起工作)

所有人都說,我真的沒有任何理由去除和創建在一個新的身體元素。您只需以所需的方式操作現有的body元素,以最大限度地減少由於刪除正文而導致的任何潛在的瀏覽器問題。

0
var newbody = "<body><div>hello</div></body>"; 

$("body").html(""); 
$("body").append(newbody); 

http://jsfiddle.net/3xkXQ/

+0

不能與類工作:(http://jsfiddle.net/3xkXQ/2/ – aprea 2011-06-03 11:46:55

+2

檢查輸出上新的dom,按照原來的dom,班級仍然是「你好」 – aprea 2011-06-03 11:49:22

2

或更好..

var newbody = "<body><div>hello</div></body>"; 
$("body").replaceWith(newbody);