Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Homework] JavaScript Basics - JavaScript DOM & Events - Problem {2} - Display DIV's Content - изпълнение на кода

Здравейте,

Това е кодът ми за задачата:
http://pastebin.com/MPfEzsvp

Първият ми въпрос е - защо в примера липсва праен лист. Логично погледнато би трябвало да се отпечата нулевото съдържание и на празния HTML. Макар че това можем да го заобиколим, като пушваме елемент в листа, само ако не е празен.

Вторият ми въпрос е свързан с работата на цикъла. Явно не работи. inputs.lenght е 5. Само че поради някаква причина кодът влиза в цикъла шести път. Търси inputs[5] и след като не го намира, пушва още веднъж предния елемент Inner Div. Съответно в листа имаме един Inner Div повече. Някой има ли идея на какво се дължи и как се оправя?

Тагове:
0
JavaScript Fundamentals
Samuil.Petrow avatar Samuil.Petrow 1550 Точки

По вторият въпрос - дължи се на това, че javascript е идиотски език. Повече в дълбочина не мога да го обясня : D

Кеширай дължината на масива ето по този начин и ще се оправи:

for(var i = 0, len = inputs.length; i<len; i++)
0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Оправи се, мерси

0
lostm1nd avatar lostm1nd 121 Точки

Всъщност проблемът не е в JavaScript-a. Това е нормалното поведение. Това, което се случва е следното:

1. Взимаш всички елементи с таг <div>. Това, което ти връща фънкцията getElementsByTagName() е Live Node List. Какво означава това? Това означава че всеки пък когато се промени ДОМ дървото този Live Node List също ще отчете тази промяна. Тоест ако търсиш всички <div> елементи на страницата, всеки пък когато добавиш нов <div> дължината на този Live Node List ще се увеличава. Инфо

2. След като вземеш всички <div> елементи започваш да ги пъхаш в <li> тагове като взимаш innerHTML. Това, което ти връща innerHTML е всичко, което е вътре във всеки <div>. Какво означава това? Това значи, че когато вземеш innerHTML на <div> номер 3 получаваш следното "third div<div>inner div</div>". След като си взел това нещо го слагаш в едно <li> и ако помислиш върху 1ва точка, ще разбереш защо имаш допълнителен елемент ; )

1
21/11/2014 15:22:28
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Само един съвет да добавя: Свиквай да ползваш innerText вместо innerHtml! Много лоши неща се случват с това innerHtml, повярвай ми!

0
20/11/2014 18:10:20
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.