将所有子节点复制到其他元素的本地方式 [英] Native way to copy all child nodes to an other element
问题描述
原始
< blabla foo =bar>
< aa> asas< / aa>
< ff>
< cc>
< dd />
< / cc>
< / ff>
< gg attr2 =2>
< / gg>
...
...
< / blabla>
成为
< blabla foo =bar>
< magic>
< aa> asas< / aa>
< ff>
< cc>
< dd />
< / cc>
< / ff>
< gg attr2 =2>
< / gg>
...
...
< / magic>
< / blabla>
因此,在文档根节点(document.documentElement)下添加一个子直接,并将原来的孩子。
这里必须使用简单的javascript(ecmascript)完成。
现在的想法是
//获取根节点
RootNode = mymagicdoc.documentElement;
//创建新的魔术元素(将包含原始根节点的内容)
var magicContainer = mymagicdoc.createElement(magic);
//将所有根节点子节点(及其子树 - 深拷贝)复制到魔术节点
/ *这里
RootNodeClone = RootNode.cloneNode(true);
RootNodeClone.childNodes ......
* /
//从根节点
中删除所有子节点(RootNode.hasChildNodes())RootNode.removeChild (RootNode.firstChild);
//当根节点为空时,添加包含原始根节点
RootNode.appendChild(magicContainer)的所有子节点的magicContainer
//节点;
如何做/ * * / step?或者也许有人有更好的解决方案来实现理想的结果?
提前谢谢!
答案:
这样的东西应该与纯DOM和ECMAScript一起工作:
var blabla = mymagicdoc.documentElement
,magic = mymagicdoc.createElement(magic);
while(blabla.hasChildNodes()){
magic.appendChild(blabla.removeChild(blabla.firstChild))
}
blabla.appendChild(magic);
I have to change "unknown" contents of XML. The structure and content itself is valid. Original
<blabla foo="bar">
<aa>asas</aa>
<ff>
<cc>
<dd />
</cc>
</ff>
<gg attr2="2">
</gg>
...
...
</blabla>
becomes
<blabla foo="bar">
<magic>
<aa>asas</aa>
<ff>
<cc>
<dd />
</cc>
</ff>
<gg attr2="2">
</gg>
...
...
</magic>
</blabla>
thus, adding a child straight under document root node (document.documentElement) and "pushing" the "original" children under that. Here it has to be done in plain javascript (ecmascript).
The idea now is to
// Get the root node
RootNode = mymagicdoc.documentElement;
// Create new magic element (that will contain contents of original root node)
var magicContainer = mymagicdoc.createElement("magic");
// Copy all root node children (and their sub tree - deep copy) to magic node
/* ????? here
RootNodeClone = RootNode.cloneNode(true);
RootNodeClone.childNodes......
*/
// Remove all children from root node
while(RootNode.hasChildNodes()) RootNode.removeChild(RootNode.firstChild);
// Now when root node is empty add the magicContainer
// node in it that contains all the children of original root node
RootNode.appendChild(magicContainer);
How to do that /* */ step? Or maybe someone has a much better solution in general for achieving the desirable result?
Thank you in advance!
Answer: The solution by maerics works perfectly.
Something like this should work with pure DOM and ECMAScript:
var blabla = mymagicdoc.documentElement
, magic = mymagicdoc.createElement("magic");
while (blabla.hasChildNodes()) {
magic.appendChild(blabla.removeChild(blabla.firstChild))
}
blabla.appendChild(magic);
这篇关于将所有子节点复制到其他元素的本地方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!