Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   нормализация DOM (https://javascript.ru/forum/events/9740-normalizaciya-dom.html)

namreg 03.06.2010 21:39

нормализация DOM
 
Здравствуйте!
Возникла задача: нужно нормализовать DOM. 4 часа уже копаюсь ничкго не могу придучать. может у кого есть функция, которая нормализует. ну или подскажите алгоритм.
Спасибо!

Gvozd 03.06.2010 21:47

зачем вам это понадобилось
ф-ции для этого вроде нету(но некоторые браузеры сами нормализуют)
а алгоритм простой-пройтись рекурсивно по DOM-дереву и удалить пустые узлы
наверняка вам поможет это материал, если не знали его ранее. ну или куски из него

namreg 03.06.2010 23:22

Цитата:

Сообщение от Gvozd (Сообщение 57788)
зачем вам это понадобилось
ф-ции для этого вроде нету(но некоторые браузеры сами нормализуют)
а алгоритм простой-пройтись рекурсивно по DOM-дереву и удалить пустые узлы
наверняка вам поможет это материал, если не знали его ранее. ну или куски из него

ну это японятно...А как определить, что это пустой узел?

Gvozd 03.06.2010 23:31

ну, регуляркой desu
если в нем содержатся только пробельные символы, то он пустой

Octane 03.06.2010 23:48

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

Лучше пересмотреть задачу и попробовать избавится от необходимости нормализовывать.

namreg 04.06.2010 00:27

ок. может тогда подскажете как решить такую задачу:
есть xml файл. мне нужно згрузить его при помощи ajax(к слову это я сделал) и отобразить на странице, кроме определённых тегов(допустим error и warning), и отоьразить на странице. если тег является потомком, то нужно сделать отступ.
В общем, нужно чтоб получился форматированный xml файл, кроме определённых тегов.
Прошу прощения за такое оъяснение...=)

B@rmaley.e><e 04.06.2010 08:39

Пройтись по узлам DOM дерева этого XML файла, выводя нужную информацию.

Анатолий Ермолов 03.10.2011 23:46

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:47

или

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 или иной узел...

Kolyaj 04.10.2011 09:36

Анатолий Ермолов,
1С-ник чтоли?


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