Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.5k views
in Technique[技术] by (71.8m points)

javascript - Native way to copy all child nodes to an other element

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...