Вопрос

Я пишу скрипт, который должен перемещать элемент оберточного узла по странице.Я обнаружил, что когда я делаю это, я удаляю ранее завернутые дочерние элементы.Как мне отменить назначение дочерних элементов узла, чтобы я мог переместить этот родительский узел в другое место?

Я думал примерно об этом:

  var parg = document.getElementById("blah");

  if (parg.hasChildNodes())
   {
     var children = parg.childNodes;
     while (children.length > 0)
     {
      parg.insertBefore(parg.firstChild);
      parg.removeChild(parg.firstChild);
     };
   };

Строка, в которой, как я предполагаю, проблема, - это логика "insertBefore".

Это было полезно?

Решение

insertBefore работает с элементом node и принимает два аргумента: новый узел и узел, которому будет предшествовать новый узел.

function unwrap(who){
 var pa= who.parentNode;
 while(who.firstChild){
  pa.insertBefore(who.firstChild, who);
 }
}

//тест

развернуть(document.getElementById("бла-бла"));

enter image description here

Другие советы

Вам нужно будет перебрать своих детей первого уровня и назначить их родителя для " обертки " родительский элемент.

Что-то вроде этого, возможно:

if ( parg.hasChildNodes() ) {
     var children = parg.childNodes;

     for ( child in children ) {
        child.parentNode = parg.parentNode;
     }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top