Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   getElementsByTagName для нескольких тэгов (https://javascript.ru/forum/events/4144-getelementsbytagname-dlya-neskolkikh-tehgov.html)

Pattern 07.12.2011 22:05

Цитата:

Сообщение от Kolyaj (Сообщение 23103)
В том-то и дело, что не массив. Кто вам сказал, что они в память все загружаются? А вот ваша функция как раз массив формирует, и как раз память и жрет.

Согласен с тобой. Однако, во первых, не всегда какую либо задачу можно решить на лету. Во-вторых, когда данные нужны для обработки не в одном месте, на мой взгляд лучше вызвать 1 раз функцию и получить нужный результат, чем снова и снова перебирать 1 и тот же метод. В третьих, если нужно решить кроссбраузерно (мало ли что то пойдёт не так - привет IE, у него всегда всё не так, как у нормальных браузеров :-E ), не придётся в десятках мест переписывать один и тот же метод изменения. Достаточно будет поправить искомую функцию.
Что касательно возвращаемого массива.... Ну так любая созданная переменная создаётся в памяти, будь то array, будь то int, и любая из них память откушивает, каждая в своей мере, но откушивает. Тут собственно уже ложится дело на плечи разработчика какие данные возвращать и как это скажется на памяти, если мучает параноя =)
Я предложил свой вариант, для остальных - на их усмотрение, как это можно применить на собственной практике.

Kolyaj 07.12.2011 23:29

Вот некропостеры-то.

Цитата:

Сообщение от Pattern
Согласен с тобой. Однако, во первых, не всегда какую либо задачу можно решить на лету. Во-вторых, когда данные нужны для обработки не в одном месте, на мой взгляд лучше вызвать 1 раз функцию и получить нужный результат, чем снова и снова перебирать 1 и тот же метод. В третьих, если нужно решить кроссбраузерно (мало ли что то пойдёт не так - привет IE, у него всегда всё не так, как у нормальных браузеров ), не придётся в десятках мест переписывать один и тот же метод изменения. Достаточно будет поправить искомую функцию.

Сколько интересных частных случаев. Зачем они приведены рядом с универсальной функцией?

Про getElementsByTagName. Это такая виртуальная штука. Она содержит в себе имя тега и не содержит в себе выборку по этому тегу. Поиск нужного элемента происходит при обращении к нему. Поэтому вызов getElementsByTagName будет всегда очень быстрый, а взятие элемента из коллекции -- медленно.
Напротив, если положить все элементы в массив, т.е. обойти заранее коллекцию, то взятие из массива будет уже быстрым.

Выводы: если по коллекции нужно пройтись один раз, или вообще нужен только один элемент, то не надо класть все элементы в массив. Если элементы перебирать нужно несколько раз, то лучше положить их в массив.


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