Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 围绕文档正文内容包装一个div_Javascript_Html_Prototypejs - Fatal编程技术网

Javascript 围绕文档正文内容包装一个div

Javascript 围绕文档正文内容包装一个div,javascript,html,prototypejs,Javascript,Html,Prototypejs,我正在尝试将文档的body标记的内容动态包装到DIV中。到目前为止,我使用了以下代码: document.body.innerHTML = '<div id="wrap">' + document.body.innerHTML + '</div>'; document.body.innerHTML=''+document.body.innerHTML+''; 这是可行的,但有一个不必要的副作用,即同一页面上的其他脚本停止工作(我假设是因为更改innerHTML会导致它

我正在尝试将文档的body标记的内容动态包装到DIV中。到目前为止,我使用了以下代码:

document.body.innerHTML = '<div id="wrap">' + document.body.innerHTML + '</div>';
document.body.innerHTML=''+document.body.innerHTML+'';
这是可行的,但有一个不必要的副作用,即同一页面上的其他脚本停止工作(我假设是因为更改innerHTML会导致它们可能认为无用的任何对象引用)

使用纯JavaScript或原型框架实现这一点并保持引用完整性的最佳/最有效的方法是什么?

您可以试试这个?(未经测试)

var newDiv=document.createElement('div'))
setAttribute('id','wrap');
var bodyChildren=document.body.childNodes;

对于(var i=0;i您可以执行以下操作:

var div = document.createElement("div");
div.id = "wrap";

// Move the body's children into this wrapper
while (document.body.firstChild)
{
    div.appendChild(document.body.firstChild);
}

// Append the wrapper to the body
document.body.appendChild(div);
$('iframe').contents().find('body').wrap('');
$('#iframe').contents().find('body').replaceWith(函数(){返回this.innerHTML});
$('#iframe').contents().find('.body').wrap('');

这几行将在body元素标记内包装一个div。首先,它将包装body标记,然后删除body标记并将其所有内容附加到body div,第三行将再次使用body标记包装此div。

可能类似于:

var body = document.body;
var div = document.createElement('div');
div.className = 'wrapper';

div.innerHTML = body.innerHTML;
body.innerHTML = div.outerHTML;

这正是我要说的,唯一的区别是我会提到的,使用原型DOM生成器:谢谢!(原型中有一个wrap方法,我尝试过,但我只设法将div包装在主体的外部,而不是内部)。问题是,当您以这种方式重新分配html内容时,所有附加的JavaScript事件都会丢失。或者至少是在代码中分配的事件(我猜onlick处理程序仍然保持不变)。奇怪。通过这种方式,大多数DOM对象完全不受影响,甚至主体的子对象也只改变了它们的位置。附加的事件应该完全不变。与执行类似于
document.body.innerHTML=“+document.body.innerHTML+”;
!:)的操作不同@AnthonyMills如果事件仍然被附加,那是因为DOM对象没有像执行
时那样被重新编写。innerHTML
@Benjamin是的,我认为这在我之前的评论中是清楚的。只是好奇,你为什么不这样做?我很确定这不会验证(如果不是用JS动态完成的话)我认为我对标题的措辞可能会产生误导-这是我试图包装的文档正文的内容,而不是正文标记本身:)-1因为假设了错误的框架,没有回答问题(使用
innerHTML
不会保留事件处理程序)。@clockworkgeek:我想我已经放弃了正确的答案,您需要在将任何事件绑定到元素和$(“#iframe”)之前将这些行放在$(window).load函数上仅举一个例子,您可以使用element@Nadeem-正确的答案应该是
$('body')。wrapInner(“”);
…但是时钟是正确的,它仍然假设询问者正在使用jQuery,这是一个错误的假设。
var div = document.createElement("div");
div.id = "wrap";

// Move the body's children into this wrapper
while (document.body.firstChild)
{
    div.appendChild(document.body.firstChild);
}

// Append the wrapper to the body
document.body.appendChild(div);
$('#iframe').contents().find('body').wrap('<div class=body></div>');
$('#iframe').contents().find('body').replaceWith(function() {return this.innerHTML});
$('#iframe').contents().find('.body').wrap('<body></body>');
var body = document.body;
var div = document.createElement('div');
div.className = 'wrapper';

div.innerHTML = body.innerHTML;
body.innerHTML = div.outerHTML;