Собственный способ скопировать все дочерние узлы в другой элемент - PullRequest
0 голосов
/ 18 июня 2010

Я должен изменить «неизвестное» содержимое 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).

Идея теперь состоит в том, чтобы

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

Как это сделать / * * / step?Или, может быть, у кого-то есть гораздо лучшее решение для достижения желаемого результата в целом?
Заранее спасибо!

Ответ: Решение maerics работает отлично.

1 Ответ

7 голосов
/ 18 июня 2010

Примерно так должно работать с чистым DOM и ECMAScript:

var blabla = mymagicdoc.documentElement
  , magic = mymagicdoc.createElement("magic");
while (blabla.hasChildNodes()) {
  magic.appendChild(blabla.removeChild(blabla.firstChild))
}
blabla.appendChild(magic);
...