Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   зачем getElementById (https://javascript.ru/forum/events/56306-zachem-getelementbyid.html)

catapulta 09.06.2015 13:55

зачем getElementById
 
Зачем нужен getElementById, если все элементы и так доступны по id?
Пишу просто имя элемента, которое было объявлено в html, и все работает. Во всех источниках пишут про getElementById, как будто другого способа нет. В чем секрет и где зарыта собака?

ksa 09.06.2015 16:43

Цитата:

Сообщение от catapulta
В чем секрет и где зарыта собака?

То, что есть у тебя сейчас, не всегда было... ;) Было время и самого метода getElementById не было... :D

sogoodweather 09.06.2015 17:42

Возможно дело в том, что если id переопределен, при прямом доступе разные браузеры начинают вести себя по-разному. Если соблюдается условие 1 id -- 1 элемент, то все ок, можно без getElementById.

Erolast 09.06.2015 19:25

Цитата:

В чем секрет и где зарыта собака?
В нарушении инкапсуляции. Что, если понадобится объявить переменную с тем же именем, что ид какого-то элемента? Это устаревший способ, который существовал на самых первых порах веба и сохраняется лишь для обратной совместимости (и только в нестрогом режиме).

sogoodweather 09.06.2015 19:31

Цитата:

Сообщение от Erolast
Что, если понадобится объявить переменную с тем же именем, что ид какого-то элемента?

LOL, инкапсуляция, она такая инкапсулированная. Что если придется объявить переменную, которая уже существует.

catapulta 10.06.2015 05:36

Цитата:

Сообщение от sogoodweather (Сообщение 374520)
Возможно дело в том, что если id переопределен, при прямом доступе разные браузеры начинают вести себя по-разному. Если соблюдается условие 1 id -- 1 элемент, то все ок, можно без getElementById.

А getElementById при двух id разве не ведет себя по-разному в разных браузерах? Там тоже есть требование к уникальности id.
Мне не нравится, что про это нигде не написано. Возможность есть описания нет.

catapulta 10.06.2015 05:41

Цитата:

Сообщение от Erolast (Сообщение 374537)
В нарушении инкапсуляции. Что, если понадобится объявить переменную с тем же именем, что ид какого-то элемента? Это устаревший способ, который существовал на самых первых порах веба и сохраняется лишь для обратной совместимости (и только в нестрогом режиме).

По-моему, то, что удобнее, то и более современное. Кучу кода можно удалить. Зачем загружать данные, создавать для них переменные, если они и так уже загружены? Или они не загружены, а поиск в DOM объекте выполняется при каждом неизвестном имени?
В Flash это например есть, там назначается actionscript имя переменной или класса, а потом просто к ним обращаешься из кода и все. Что тут устаревшего не понимаю

catapulta 10.06.2015 05:55

a.b.c (через точку к дочерним элементам) нельзя обращаться.

Erolast 12.06.2015 10:05

Цитата:

По-моему, то, что удобнее, то и более современное.
Нет. Код должен быть еще и очевидным.

Цитата:

a.b.c (через точку к дочерним элементам) нельзя обращаться.
Можно document.getElementById("a").getElementById("b"), но зачем? Результат будет тот же, что и при document.getElementById("b"), идентификатор уникальным же должен быть.

Цитата:

Или они не загружены, а поиск в DOM объекте выполняется при каждом неизвестном имени?
Да.
http://www.w3.org/TR/html5/browsers....-window-object


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