08.02.2015, 13:45
|
Аспирант
|
|
Регистрация: 05.02.2015
Сообщений: 51
|
|
Ошибка в учебнике
Не знаю, куда запотсить, перенесите тему, если чо.
Вот тут
http://learn.javascript.ru/searching-elements-dom
Цитата:
|
Важно, что в документе может быть только один элемент с данным id. Конечно, можно нарушить это правило и создать много элементов с одинаковым идентификатором, но в таком случае поведение метода getElementById будет непредсказуемым.
|
естественно, семантически неверно использовать неуникальные идентификаторы, но технически, данное утверждение, о непредсказуемом поведении, по-моему, ошибочно. Во всяком случае, я ни разу не встречал UB в широко поддерживаемых на данный момент браузерах(в том числе ie8). Всегда возвращается первый элемент.
<html>
<head>
</head>
<body>
<div id="foo">foo</div>
<div id="foo">bar</div>
<div id="foo">baz</div>
<script>
alert(document.getElementById("foo").innerHTML)
</script>
</body>
</html>
И вот еще что, следом там идет
Цитата:
|
Браузер автоматически создаёт переменные для элементов с id, через которые к ним можно обратиться.
...
Это поведение соответствует стандарту. Оно существует, в первую очередь, для совместимости, как осколок далёкого прошлого.
|
это сугубое ИМХО, но это не "осколок", а вполне обоснованая фича, сделанная для удобства программиста, которая позволяет избежать лишней писанины типа myelement=document.getElementById("element"). К сожалению, в большинстве случаев использется именно последнее, а это ни что иное, как тупое дублирование кода.
BTW, может кто в курсе, что говорит последний стандарт по поводу данного поведения?
Последний раз редактировалось freee, 08.02.2015 в 16:28.
|
|
08.02.2015, 15:17
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
freee, фишка с ID не везде работает, поэтому лучше всегда писать так:
var test = document.getElementById('test');
|
|
08.02.2015, 15:22
|
Аспирант
|
|
Регистрация: 05.02.2015
Сообщений: 51
|
|
Сообщение от Ruslan_xDD
|
фишка с ID не везде работает, поэтому лучше всегда писать так:
|
А где не работает? Я проверял в ff, v8, и ie8. На остальные, в принципе, можно забить, в большинстве случаев. Правда, работа немного отличается, при дублировании id.
|
|
08.02.2015, 16:11
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
это сугубое ИМХО, но это не "осколок", а вполне обоснованая фича, сделанная для удобства программиста, которая позволяет избежать лишней писанины типа myelement=document.getElementById("element"). К сожалению, в большинстве случаев использется именно последнее, а это ни что иное, как тупое дублирование кода.
|
Это засирание глобала, нарушение инкапсуляции. В жопу.
|
|
08.02.2015, 16:20
|
Аспирант
|
|
Регистрация: 05.02.2015
Сообщений: 51
|
|
Сообщение от Erolast
|
засирание глобала, нарушение инкапсуляции
|
В таком случае в начале каждого скрипта удаляй все имена которые соответствуют идентификаторам в документе.
И, при чем тут инкапсуляция?
|
|
08.02.2015, 16:27
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
freee, я как-то забыл записать элемент в переменную, а потом полдня гадал почему в FF не работает.
|
|
08.02.2015, 16:40
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
И, при чем тут инкапсуляция?
|
При том, что засирание глобала и есть нарушение инкапсуляции.
Цитата:
|
В таком случае в начале каждого скрипта удаляй все имена которые соответствуют идентификаторам в документе.
|
Вот именно. Какого хрена я должен при написании контроллера оглядываться на верстку представления?
|
|
08.02.2015, 16:53
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
Erolast, ну а что теперь сделать? Может ещё неиспользуемые методы API удалять?
|
|
08.02.2015, 17:04
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
А такие есть?
|
|
08.02.2015, 17:14
|
Аспирант
|
|
Регистрация: 05.02.2015
Сообщений: 51
|
|
Сообщение от Erolast
|
А такие есть?
|
Он имеет в виду, видимо, неиспользуемые в конкретном приложении.
Кстати в самом языке, тоже много чего можно поудалять, для более лучшей инкапсуляции.
|
|
|
|