是否可以在没有参考的情况下复制文档 DOM(或其中的一部分)?
例如:
BodyCopy = document.body;
document.body.querySelector('#example').innerHTML = '<p>foo</p>';
BodyCopy.querySelector('#example').innerHTML = '<p>bar</p>';
// will output <p>bar</p>, but should be <p>foo</p>
console.log(document.body.querySelector('#example').innerHTML);
// will output <p>bar</p>
console.log(BodyCopy.querySelector('#example').innerHTML);
Run Code Online (Sandbox Code Playgroud)
更新:
好的,clondeNode() 似乎首先起作用,但如果我这样做
BodyCopy = document.body.cloneNode(true);
document.body.querySelector('#example').innerHTML = '<p>foo</p>';
BodyCopy.querySelector('#example').innerHTML = '<p>bar</p>';
// will output <p>foo</p>
console.log(document.body.querySelector('#example').innerHTML);
// will output <p>bar</p>
console.log(BodyCopy.querySelector('#example').innerHTML);
// Show edited copy
document.body = BodyCopy;
document.body.querySelector('#example').innerHTML = '<p>foo</p>';
BodyCopy.querySelector('#example').innerHTML = '<p>bar</p>';
// will output <p>bar</p>, but should be <p>foo</p>
console.log(document.body.querySelector('#example').innerHTML);
// will output <p>bar</p>
console.log(BodyCopy.querySelector('#example').innerHTML);
Run Code Online (Sandbox Code Playgroud)
它不会像我预期的那样工作。请参阅JSFiddle。
你不是在任何地方复制 DOM,而是分配document.body给一个名为BodyCopy.
您需要cloneNode()在作业中使用:
BodyCopy = document.body.cloneNode(true);
Run Code Online (Sandbox Code Playgroud)
var BodyCopy = document.body.cloneNode(true);
document.body.querySelector('#example').innerHTML = '<p>foo</p>';
BodyCopy.querySelector('#example').innerHTML = '<p>bar</p>';
// Now outputs <p>foo</p>
console.log(document.body.querySelector('#example').innerHTML);
// Now outputs <p>bar</p>
console.log(BodyCopy.querySelector('#example').innerHTML);
Run Code Online (Sandbox Code Playgroud)