Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2010, 21:39
Новичок на форуме
Отправить личное сообщение для namreg Посмотреть профиль Найти все сообщения от namreg
 
Регистрация: 03.06.2010
Сообщений: 4

нормализация DOM
Здравствуйте!
Возникла задача: нужно нормализовать DOM. 4 часа уже копаюсь ничкго не могу придучать. может у кого есть функция, которая нормализует. ну или подскажите алгоритм.
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2010, 21:47
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

зачем вам это понадобилось
ф-ции для этого вроде нету(но некоторые браузеры сами нормализуют)
а алгоритм простой-пройтись рекурсивно по DOM-дереву и удалить пустые узлы
наверняка вам поможет это материал, если не знали его ранее. ну или куски из него
Ответить с цитированием
  #3 (permalink)  
Старый 03.06.2010, 23:22
Новичок на форуме
Отправить личное сообщение для namreg Посмотреть профиль Найти все сообщения от namreg
 
Регистрация: 03.06.2010
Сообщений: 4

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

ну, регуляркой desu
если в нем содержатся только пробельные символы, то он пустой
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2010, 23:48
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

А если такой код:
<strong>text1</strong> <em>text3</em>
здесь 3 текстовых узла и один из них содержит только пробельные символы, но удалять его не нужно.
Придется еще проверять наличие пробелов в конце предыдущего текстового узла и начале следующего, но тут тоже не все просто:
<strong>text1 </strong><input /> <em>text3</em>
здесь оба пробела нужны.

Лучше пересмотреть задачу и попробовать избавится от необходимости нормализовывать.
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2010, 00:27
Новичок на форуме
Отправить личное сообщение для namreg Посмотреть профиль Найти все сообщения от namreg
 
Регистрация: 03.06.2010
Сообщений: 4

ок. может тогда подскажете как решить такую задачу:
есть xml файл. мне нужно згрузить его при помощи ajax(к слову это я сделал) и отобразить на странице, кроме определённых тегов(допустим error и warning), и отоьразить на странице. если тег является потомком, то нужно сделать отступ.
В общем, нужно чтоб получился форматированный xml файл, кроме определённых тегов.
Прошу прощения за такое оъяснение...=)
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2010, 08:39
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Пройтись по узлам DOM дерева этого XML файла, выводя нужную информацию.
Ответить с цитированием
  #8 (permalink)  
Старый 03.10.2011, 23:46
Новичок на форуме
Отправить личное сообщение для Анатолий Ермолов Посмотреть профиль Найти все сообщения от Анатолий Ермолов
 
Регистрация: 28.03.2009
Сообщений: 4

function НормализоватьDOM(Т) {
var Д;
var R = /^\s+$/;
for (var i = 0; i < Т.childNodes.length; i++) {
Д = Т.childNodes[i];
if ((Д.nodeName == '#text') && (R.test(Д.nodeValue))) {
Т.removeChild(Т.childNodes[i]);
i--;
} else {
if (Д.hasChildNodes()) { НормализоватьDOM(Д); };
};
};
};
Где T, например, document.body или иной узел...

Последний раз редактировалось Анатолий Ермолов, 03.10.2011 в 23:54.
Ответить с цитированием
  #9 (permalink)  
Старый 03.10.2011, 23:47
Новичок на форуме
Отправить личное сообщение для Анатолий Ермолов Посмотреть профиль Найти все сообщения от Анатолий Ермолов
 
Регистрация: 28.03.2009
Сообщений: 4

или

function УдалениеПустыхТекстовыхУз лов(Узел) {
for (var i = 0; i < Узел.childNodes.length; i++) {
var ДочернийУзел = Узел.childNodes[i];
if ((ДочернийУзел.nodeType == 3) && (ДочернийУзел.nodeValue.search(/\n/) != -1)) {
Узел.removeChild(Узел.childNodes[i]);
i--;
}
if (ДочернийУзел.nodeType == 1) УдалениеПустыхТекстовыхУз лов(ДочернийУзел);
}
}
Где Узел, например, document.body или иной узел...

Последний раз редактировалось Анатолий Ермолов, 03.10.2011 в 23:55.
Ответить с цитированием
  #10 (permalink)  
Старый 04.10.2011, 09:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Анатолий Ермолов,
1С-ник чтоли?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где найти справочник методов DOM? master_alf Events/DOM/Window 6 16.04.2010 12:25
Как узнать содержит ли DOM определенный элемент Ruslan Events/DOM/Window 8 12.03.2010 22:02
Вопрос о циклических ссылках (JavaScript -> Dom -> JavaScipt) BlueIce Events/DOM/Window 10 17.02.2010 21:58
Обращение к layer в DOM Asd Элементы интерфейса 2 01.07.2009 23:16
Сохранение дерева DOM в файл Александр1985 Общие вопросы Javascript 7 24.01.2009 23:15