为什么这不起作用?
var newbody = "<body><div>hello</div></body>";
$("body").remove();
$("head").after(newbody);
我得到的就是:
</head>
<div>hello</div>
如何让它停止丢弃身体标签?
答案 0 :(得分: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元素。您应该以所需的方式操作现有的body元素,以尽量减少因删除正文而导致的任何潜在的浏览器问题。
答案 1 :(得分:2)
或更好..
var newbody = "<body><div>hello</div></body>";
$("body").replaceWith(newbody);
答案 2 :(得分:0)
var newbody = "<body><div>hello</div></body>";
$("body").html("");
$("body").append(newbody);