Javascript.RU

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

Склеить стоящие рядом одинаковые ноды.
Дано:
<i>текст курсивом</i><i>еще текст курсивом</i> <b>жирный текст</b>

Нужно склеить стоящие рядом узлы с одинаковым nodeName. Не знаю, как будет эффективней: прогуляться по дереву или к innerHTML применить регулярку? Возможно, у кого-нибудь есть интересные решения. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2009, 23:33
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Dima
к innerHTML применить регулярку?
и заодно перерисовать с нуля все окно?
только пробежка по дереву
PS не забудь что такие теги как <li> к примеру не должны быть объеденены
PPS не додумайся использовать getElementsByTagName('*').
его результат не массив элементов, а DOMNodeList
PPPS ассинхонность для снятия нагрузки тут не подойдет, в том случае, если у объединяемых элементов могут быть дети-также объединямые теги
и в довершение: "а нафига?"

Последний раз редактировалось Gvozd, 26.09.2009 в 23:35.
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2009, 00:31
Dima
 
Сообщений: n/a

Пишу велосипед-wysiwyg. Пересмотрел многие опенсорсные решения и захотелось:
div с contentEditable=true вместо iframe. При помощи дива очень просто сделать autogrow для редактируемой области.
cleaner при onpaste
параграф при двойном [enter] и br при одиночном.
минимальный объем кода с минимумом доступных опций.

Gvozd, спасибо за подсказки, учту.
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2009, 08:22
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Лучше собирать html-строку при обходе DOM-дерева, а потом сразу заменить весь document.body.innerHTML. Так работа превратится в написание конечного автомата, который в зависимости от состояния будет дописывать в строку нужные открывающие и закрывающие теги.
Если же работать, используя методы DOM для перестроения дерева, алгоритм во много раз усложнится и скорость выполнения скрипта упадет.
Я писал модуль для WYSIWYG-редактора, который преобразует весь код в нормальное состояние, заменяя deprecated-теги соответствующими CSS-стилями, объединяя одинаковые подрядидущие теги, удаляя пустые теги и т.д., вышло чуть больше 1000 строк кода пытался реализовывать разными способами, но в итоге остановился на конечном автомате, собирающем новый HTML-код в строку, основываясь на данных, полученных при обходе DOM дерева.

Последний раз редактировалось Octane, 27.09.2009 в 08:25.
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2009, 10:44
Dima
 
Сообщений: n/a

Octane, я еще не разобрался с конечными автоматами, в теории понятно, на практике нет. Буду счастлив, если вы вышлете пример своего модуля мне на почту dima[собака]dima.by, чтобы посмотреть реализацию конечного автомата уже на понятном мне примере.
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2009, 12:16
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Прислать не могу, проект коммерческий был
Ответить с цитированием
Ответ



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

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