Показать сообщение отдельно
  #15 (permalink)  
Старый 08.04.2009, 05:53
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

Сообщение от Gvozd
я не уверен, насчет replaceChild и его кроссбраузерности.
replaceChild описан в стандарте и есть даже в самых древних справочниках по dom. Если и будут какие-то проблемы, то они будут в каком-нибудь IE5.5, про который давно пора забыть.

Сообщение от Gvozd
я лично в таком случае использовал insertBefore и removeChild
Это и так вероятно далеко не самый быстрый вариант, а ты его еще замедлить хочешь (вызов двух методов вместо одного). Ну, станет он работать под каким-нибудь IE5.5 и 0,000....00.1 % пользователей будут рады, а вот остальные наоборот.

Сообщение от Gvozd
текстовые ноды могут быть не только у body-элемента
Как я понял не нравиться эта: (parent || document.body).childNodes строчка и ты предлагаешь пройтись еще и по meta-тегам.

Сообщение от Gvozd
они могут быть потомками любого тега, поэтому надо получить всю коллекцию
Рекурсивно обходиться ВСЯ коллекция.

Сообщение от x-yuri
а зачем ты div создаешь
С блочным элементом я поспешил, лучше span или font какой-нибудь, но элемент создавать все равно надо т. к. при создании текстового узла через createTextNode теги опять, же будут экранироваться. Если я что-то напутал, предлагай свой вариант.

Сообщение от x-yuri
я бы не записывал столько всего в for:
var childNodes = (parent || document.body).childNodes;
length = childNodes.length;
for (i = 0; i < length; i++) {
Теперь "i" будет в window. Еще пара таких функций и начнутся проблемы.

Сообщение от x-yuri
и использовал бы if'ы вместо тернарного оператора
Производительность от этого никак не измениться, зато добавится несколько байт кода. Если таких функций много, то эти несколько байт становятся несколькими Кб, и это уже неприятно.
Что касается читаемости, то, на мой взгляд, при нормальном оформлении тернарного оператора, он читается лучше, чем if-else.
Ответить с цитированием