09.06.2015, 13:55
|
Новичок на форуме
|
|
Регистрация: 09.06.2015
Сообщений: 4
|
|
зачем getElementById
Зачем нужен getElementById, если все элементы и так доступны по id?
Пишу просто имя элемента, которое было объявлено в html, и все работает. Во всех источниках пишут про getElementById, как будто другого способа нет. В чем секрет и где зарыта собака?
|
|
09.06.2015, 16:43
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от catapulta
|
В чем секрет и где зарыта собака?
|
То, что есть у тебя сейчас, не всегда было... Было время и самого метода getElementById не было...
|
|
09.06.2015, 17:42
|
Интересующийся
|
|
Регистрация: 09.06.2015
Сообщений: 26
|
|
Возможно дело в том, что если id переопределен, при прямом доступе разные браузеры начинают вести себя по-разному. Если соблюдается условие 1 id -- 1 элемент, то все ок, можно без getElementById.
|
|
09.06.2015, 19:25
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
В чем секрет и где зарыта собака?
|
В нарушении инкапсуляции. Что, если понадобится объявить переменную с тем же именем, что ид какого-то элемента? Это устаревший способ, который существовал на самых первых порах веба и сохраняется лишь для обратной совместимости (и только в нестрогом режиме).
|
|
09.06.2015, 19:31
|
Интересующийся
|
|
Регистрация: 09.06.2015
Сообщений: 26
|
|
Сообщение от Erolast
|
Что, если понадобится объявить переменную с тем же именем, что ид какого-то элемента?
|
LOL, инкапсуляция, она такая инкапсулированная. Что если придется объявить переменную, которая уже существует.
|
|
10.06.2015, 05:36
|
Новичок на форуме
|
|
Регистрация: 09.06.2015
Сообщений: 4
|
|
Сообщение от sogoodweather
|
Возможно дело в том, что если id переопределен, при прямом доступе разные браузеры начинают вести себя по-разному. Если соблюдается условие 1 id -- 1 элемент, то все ок, можно без getElementById.
|
А getElementById при двух id разве не ведет себя по-разному в разных браузерах? Там тоже есть требование к уникальности id.
Мне не нравится, что про это нигде не написано. Возможность есть описания нет.
|
|
10.06.2015, 05:41
|
Новичок на форуме
|
|
Регистрация: 09.06.2015
Сообщений: 4
|
|
Сообщение от Erolast
|
В нарушении инкапсуляции. Что, если понадобится объявить переменную с тем же именем, что ид какого-то элемента? Это устаревший способ, который существовал на самых первых порах веба и сохраняется лишь для обратной совместимости (и только в нестрогом режиме).
|
По-моему, то, что удобнее, то и более современное. Кучу кода можно удалить. Зачем загружать данные, создавать для них переменные, если они и так уже загружены? Или они не загружены, а поиск в DOM объекте выполняется при каждом неизвестном имени?
В Flash это например есть, там назначается actionscript имя переменной или класса, а потом просто к ним обращаешься из кода и все. Что тут устаревшего не понимаю
Последний раз редактировалось catapulta, 10.06.2015 в 05:53.
|
|
10.06.2015, 05:55
|
Новичок на форуме
|
|
Регистрация: 09.06.2015
Сообщений: 4
|
|
a.b.c (через точку к дочерним элементам) нельзя обращаться.
|
|
12.06.2015, 10:05
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
По-моему, то, что удобнее, то и более современное.
|
Нет. Код должен быть еще и очевидным.
Цитата:
|
a.b.c (через точку к дочерним элементам) нельзя обращаться.
|
Можно document.getElementById("a").getElementById("b"), но зачем? Результат будет тот же, что и при document.getElementById("b"), идентификатор уникальным же должен быть.
Цитата:
|
Или они не загружены, а поиск в DOM объекте выполняется при каждом неизвестном имени?
|
Да.
http://www.w3.org/TR/html5/browsers....-window-object
|
|
|
|