![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Sardar |
|
||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
W3C DOM логичная штука, но не всегда удобно иметь теги в перемешку с тексовыми нодами, коментариями и прочим "шумом". Особенно это раздражает в мозилле, где пробелы между тегами это текстовые ноды. Приходится крутить циклы что бы добратся то тега.
В XML мы используем XPath для выборок нод, но как назло в HTML DOM сей фичи нет. Есть пара "левых" функций типа getElementsByTagName, getElementByName и прочие недоделки нормального XPath. Представленный код очень прост, мы создаём отдельное дерево по дереву элементов, но в нашем дереве существуют только теги. Также добавим несколько функций выборок, которые часто необходимы.
Код очень прост. Теперь при работе с деревом нужно создать наше поддерево. PDOM дерево создаётся также и для потомков, ранее созданные деревья не создаются по новой. Ссылку на дерево хранить не нужно, ноды хранятся в свойствах "настоящих" нод в поле pdom.
Ссылки на все часто используемые поля, например style, зеркально отображенны и в PDOM ноде. Это может сбить с толку, потому получив ноду проверьте что это:
Ничто не мешает реализовать XPath в ручную, но это будет довольно тяжёлый код, посик будет перебором дерева, т.е. медленный. Потому и реализовываем только то что нужно, например getElementsByClassName выбирающий все ноды с заданным аттрибутом class. Это редко нужно, в моём коде мы достаём первую попавшуюся на пути. Этот код - просто идея, написан за 15мин, когда вдруг остро понадобилось -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||
|
|||||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |