JavaScript:在没有参考的情况下复制文档 DOM

Hat*_*tiv 1 javascript dom

是否可以在没有参考的情况下复制文档 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

Ben*_*enM 5

你不是在任何地方复制 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)

jsFiddle 演示