Ошибка в учебнике
Не знаю, куда запотсить, перенесите тему, если чо.
Вот тут http://learn.javascript.ru/searching-elements-dom Цитата:
<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> И вот еще что, следом там идет Цитата:
BTW, может кто в курсе, что говорит последний стандарт по поводу данного поведения? |
freee, фишка с ID не везде работает, поэтому лучше всегда писать так:
var test = document.getElementById('test'); |
Цитата:
|
Цитата:
|
Цитата:
И, при чем тут инкапсуляция? |
freee, я как-то забыл записать элемент в переменную, а потом полдня гадал почему в FF не работает. :)
|
Цитата:
Цитата:
|
Erolast, ну а что теперь сделать? Может ещё неиспользуемые методы API удалять? :)
|
А такие есть?
|
Цитата:
Кстати в самом языке, тоже много чего можно поудалять, для более лучшей инкапсуляции. |
freee,
1. UB на то и UB, что оно Undefined. Во всех существующих браузерах вернётся первый элемент с таким id, да. НО совершенно не факт что завтра не появится новый браузер который будет возвращать последний. Или вообще рандомный. И никто ему не запретит так делать ибо UB.:) Потому не вижу смысла удалять это уточнение. 2. Исторически вынесение идентификаторов в глобал изначально было стандартом, потом было исключено из стандарта и вроде даже(не уверен) из некоторых браузеров, и с html5 вернулось в стандарт. Мнения на этот счёт разные, однако бесконтрольное засорение глобальной области видимости среди js-программистов считается моветоном. Некоторые даже специально используют идентификаторы содержащие символы невозможные в переменных, дабы избежать замусоривания. Например: <input type="text" id=":textfield"> Так или иначе я бы не назвал это "ошибками в учебнике". Максимум недостаточная освещённость вопроса и то спорно. |
Цитата:
Кроме того, поиски getElementById, возможно, используют все те же глобальные переменные. А querySelector с решеткой использует getElementById... И так далее, дальше в лес - больше дров. |
freee, не там тормоза ищите. getElementById работает очень быстро. Это не может стать бутылочным горлышком ни в одном разумном случае.:)
|
Aetae,
Кстати, нет, щас проверил, никуда они не деваются, они просто недоступны в литеральной нотации, так что это вдвойне глупо <html> <head> </head> <body> <div id=":foo">foo</div> <script> alert(window[":foo"]) </script> </body> </html> |
Цитата:
|
freee, оно не верно. В глобале лишь ещё одна ссылка.
P.S. Не надо "гадать". Никогда. Интересно как работает - смотри спецификацию или код движка. |
Цитата:
|
freee, всё сложнее и проще. Нет никакого смысла нативному коду лезть в javascript'овский глобал.
|
Цитата:
|
Ваше представление о том как всё работает крайне ошибочно и наивно. Дискутировать никакого желания у меня нет.
Лет через пять, если не завяжете с этим делом, будете со смехом читать свои текущие посты. |
Похоже у foo новый ник.
Снова троллингом развлекается )). |
MallSerg, действительно, IP совпадают.
freee, очередной аккаунт foo/Krutoy/losos10, бан навсегда. |
Да ладно, на этот раз же вполне адекватен был.
|
Erolast, на долго ли? :) Создание фейкового аккаунта - уже нарушение.
|
Бан это уже слишком.
на личности он не переходил и вел себя хорошо без foo форум становится скучным =( |
MallSerg, по твоей логике, я могу смело нарушать правила форума, и в случае бана - просто создавать новый аккаунт. :)
Что касается freee, то он всё прекрасно знает, а темы с глупыми вопросами создаёт, чтобы развести тут очередной холивар. Если бы вёл себя адекватно, то никто бы даже и не заметил, что это foo/Krutoy/losos100. |
Часовой пояс GMT +3, время: 12:17. |