Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.09.2009, 21:43
Dima
 
Сообщений: n/a

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

Нужно при помощи функций для работы с DOM удалить <strong></strong>, не затронув его вложенных элементов.
Ответить с цитированием
  #2 (permalink)  
Старый 23.09.2009, 21:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Переместить всех детей на уровень выше, потом удалить узел.
Ответить с цитированием
  #3 (permalink)  
Старый 24.09.2009, 14:47
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Лучше поотбирать детей в documetFragment, потом удалить пустого родителя и вставить фрагмент перед ним
Ответить с цитированием
  #4 (permalink)  
Старый 24.09.2009, 14:58
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от e1f
потом удалить пустого родителя и вставить фрагмент перед ним
как перед ним если он удален?
Ответить с цитированием
  #5 (permalink)  
Старый 24.09.2009, 15:01
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

e1f,
чем лучше, кроме создания одного лишнего объекта и дальнейших манипуляций с ним?
Ответить с цитированием
  #6 (permalink)  
Старый 24.09.2009, 15:06
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Kolyaj,
Тем, что вместо последовательной вставки по одному элементу в ДОМ-дерево мы создаем фрагмент, который с деревом не связан, и одним махом аппендим в ДОМ.
Riim,
А запомнить elParent.previousSibling перед удалением?
Ответить с цитированием
  #7 (permalink)  
Старый 24.09.2009, 15:09
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Зачем вообще что-то вставлять/удалять, когда есть replaceChild.
Ответить с цитированием
  #8 (permalink)  
Старый 24.09.2009, 15:13
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Да, я знаю. Вот только не помню, кроссбраузерный ли он. Если да -- то это лучший выход, естественно.
Ответить с цитированием
  #9 (permalink)  
Старый 24.09.2009, 15:18
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Разве можно элемент на документ фрагмент заменить? Или реплейс как-то подругому можно использовать?
Ответить с цитированием
  #10 (permalink)  
Старый 24.09.2009, 15:23
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Пример (проверял в консоли 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 Забыл дописать, что работает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить элемент из дерева DOM dummer jQuery 13 16.01.2011 16:19