jQuery .after不会插入元素

时间:2011-06-03 11:37:44

标签: jquery

为什么这不起作用?

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

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

我得到的就是:

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

如何让它停止丢弃身体标签?

3 个答案:

答案 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);

http://jsfiddle.net/3xkXQ/