|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.08.2016, 15:03 | #1 |
Пользователь
Регистрация: 31.08.2010
Сообщений: 40
|
GetElementsByTagName - живая коллекция или все же нет? (Пример кода)
День Добрый!)
Столкнулся с таким нюансом, getElementsByTagName - возвращает "живую" коллекцию элементов с указанным тегом, для примера - код ниже: Код HTML:
<ul id="menu"> <li>Главная страница</li> <li>Форум</li> <li>Магазин</li> </ul> <script> var lis = document.body.getElementsByTagName('li'); document.body.innerHTML = ""; alert( lis.length ); //0 </script> Код HTML:
<ul id="menu"> <li>Главная страница</li> <li>Форум</li> <li>Магазин</li> </ul> <script> var lis = document.getElementById('menu').getElementsByTagName('li'); document.body.innerHTML = ""; alert( lis.length ); //Результат 3 ????? </script> Почему во втором случае мы получаем результат 3, если мы удалили все содержимое блока body! У кого какие соображения? Последний раз редактировалось Viconte; 10.08.2016 в 15:34. |
10.08.2016, 15:15 | #2 |
юзер как все
Участник клуба
Регистрация: 10.01.2012
Сообщений: 1,586
|
Все просто !
Код:
Попробуйте вот так Код:
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
|
10.08.2016, 15:45 | #3 |
Пользователь
Регистрация: 31.08.2010
Сообщений: 40
|
Не совсем то, оба примера правильные - суть в том что коллекция (которую возвращает метод getElementsByTagName)живая - что прекрасно продемонстрировано в первом примере, а вот во втором случае:
Мы удаляем все содержимое элемента body(вместе с li): Код:
Вопрос - почему коллекция не очищается? |
10.08.2016, 16:03 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Viconte, всё верно.
метод getElementsByTagName() method returns a live HTMLCollection (возвращает "живую" коллекцию). метод getElementById возвращает объект (не "живой", поэтому он не меняется при изменении в DOM) посмотрите, например, http://xahlee.info/js/js_get_elements.html какие методы возвращают "LIVE" p.s. кстати, я с JS не очень, поэтому раньше про live HTMLCollection не знал! а ещё рассмотрите такой пример: Код:
Последний раз редактировалось Serge_Bliznykov; 10.08.2016 в 16:21. |
10.08.2016, 16:51 | #5 |
Пользователь
Регистрация: 31.08.2010
Сообщений: 40
|
Serge_Bliznykov, Выяснил кое-что:
Все мы знаем что getElementsByTagName - возвращает HTMLCollection ("живую коллекцию") Давайте возьмем такую страницу HTML: Код HTML:
<div id="box"> <ul id="menu"> <li>Главная страница</li> <li>Форум</li> <li>Магазин</li> </ul> </div> Первый вариант (сделаем innerHTML непосредственно у элемента menu, к которому и применяем метод getElementsByTagName): Код:
Второй вариант (сделаем innerHTML у родителя menu): Код:
Последний раз редактировалось Viconte; 10.08.2016 в 16:58. |
10.08.2016, 17:04 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
я же повторяю, я в JS не компетентен.
Цитата:
переменная menu никак не изменяется (можете сами в отладчике посмотреть и убедится в этом)! а live (динамическая) коллекция в данном случае берётся именно от menu. Код:
Последний раз редактировалось Serge_Bliznykov; 10.08.2016 в 17:08. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Есть ли у кого пример кода распаковки и запаковки zip или 7z с прогресс баром? | Raf-9600 | C# (си шарп) | 1 | 25.11.2015 23:54 |
Inline Method пример кода..? | Masarr | Общие вопросы C/C++ | 5 | 03.12.2010 13:55 |
Правильно или нет вот в чём вопрос но ошибок нет... | Alexcool | Помощь студентам | 2 | 10.01.2010 13:55 |
Как проверить все ли ячейки в StringGrid заполнены или нет ? | Ветас | Помощь студентам | 4 | 11.11.2009 22:54 |
SMTP + SSL пример кода | dimonbest | Работа с сетью в Delphi | 8 | 15.08.2008 10:56 |