Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Удалить вершину дерева, оставив его детей. (https://javascript.ru/forum/events/5178-udalit-vershinu-dereva-ostaviv-ego-detejj.html)

Dima 23.09.2009 21:43

Удалить вершину дерева, оставив его детей.
 
Дано:
<strong>
text
<em> text </em>
... другие узлы...
</strong>

Нужно при помощи функций для работы с DOM удалить <strong></strong>, не затронув его вложенных элементов.

Kolyaj 23.09.2009 21:45

Переместить всех детей на уровень выше, потом удалить узел.

e1f 24.09.2009 14:47

Лучше поотбирать детей в documetFragment, потом удалить пустого родителя и вставить фрагмент перед ним

Riim 24.09.2009 14:58

Цитата:

Сообщение от e1f
потом удалить пустого родителя и вставить фрагмент перед ним

как перед ним если он удален?

Kolyaj 24.09.2009 15:01

e1f,
чем лучше, кроме создания одного лишнего объекта и дальнейших манипуляций с ним?

e1f 24.09.2009 15:06

Kolyaj,
Тем, что вместо последовательной вставки по одному элементу в ДОМ-дерево мы создаем фрагмент, который с деревом не связан, и одним махом аппендим в ДОМ.
Riim,
А запомнить elParent.previousSibling перед удалением? ;)

Riim 24.09.2009 15:09

Зачем вообще что-то вставлять/удалять, когда есть replaceChild.

e1f 24.09.2009 15:13

Да, я знаю. Вот только не помню, кроссбраузерный ли он. Если да -- то это лучший выход, естественно.

Octane 24.09.2009 15:18

Разве можно элемент на документ фрагмент заменить? Или реплейс как-то подругому можно использовать? :)

e1f 24.09.2009 15:23

Пример (проверял в консоли firebug'a):
(function(){
var el = document.getElementById('someId');
var dF = document.createDocumentFragment();
var fC;
while (fC = el.firstChild) dF.appendChild(fC);
el.parentNode.replaceChild(dF, el);
}())


UPD Забыл дописать, что работает :)


Часовой пояс GMT +3, время: 21:00.