нормализация DOM
Здравствуйте!
Возникла задача: нужно нормализовать DOM. 4 часа уже копаюсь ничкго не могу придучать. может у кого есть функция, которая нормализует. ну или подскажите алгоритм. Спасибо! |
зачем вам это понадобилось
ф-ции для этого вроде нету(но некоторые браузеры сами нормализуют) а алгоритм простой-пройтись рекурсивно по DOM-дереву и удалить пустые узлы наверняка вам поможет это материал, если не знали его ранее. ну или куски из него |
Цитата:
|
ну, регуляркой desu
если в нем содержатся только пробельные символы, то он пустой |
А если такой код:
<strong>text1</strong> <em>text3</em>здесь 3 текстовых узла и один из них содержит только пробельные символы, но удалять его не нужно. Придется еще проверять наличие пробелов в конце предыдущего текстового узла и начале следующего, но тут тоже не все просто: <strong>text1 </strong><input /> <em>text3</em>здесь оба пробела нужны. Лучше пересмотреть задачу и попробовать избавится от необходимости нормализовывать. |
ок. может тогда подскажете как решить такую задачу:
есть xml файл. мне нужно згрузить его при помощи ajax(к слову это я сделал) и отобразить на странице, кроме определённых тегов(допустим error и warning), и отоьразить на странице. если тег является потомком, то нужно сделать отступ. В общем, нужно чтоб получился форматированный xml файл, кроме определённых тегов. Прошу прощения за такое оъяснение...=) |
Пройтись по узлам DOM дерева этого XML файла, выводя нужную информацию.
|
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 или иной узел... |
или
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 или иной узел... |
Анатолий Ермолов,
1С-ник чтоли? |
Часовой пояс GMT +3, время: 03:33. |