将所有子节点复制到其他元素的本地方式 [英] Native way to copy all child nodes to an other element

查看:178
本文介绍了将所有子节点复制到其他元素的本地方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须改变XML的未知内容。结构和内容本身是有效的。
原始

 < 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆