#javascript
#javascript
Вопрос:
Итак, у меня есть этот js-код:
function lFunc(){
var loopCount = 5;
while(loopCount > 0) {
var target = document.getElementById("p3");
target.innerHTML = "loopcount: " loopCount "<br>" target.innerHTML;
console.log("loopcount is now: " loopCount);
loopCount = loopCount - 1;
}
}
в консоли он показывает:
loopcount is now: 5
loopcount is now: 4
loopcount is now: 3
loopcount is now: 2
loopcount is now: 1
но на веб-странице это показывает:
loopcount: 1
loopcount: 2
loopcount: 3
loopcount: 4
loopcount: 5
Целевая ссылка на var — это просто пустой открытый и закрытый p-тег.
Я не понимаю, почему веб-страница меняется с 1 на 5, на мой взгляд, она должна меняться с 5 на 1
Комментарии:
1. Потому что вы добавляете спереди. Итак, сначала он говорит «количество циклов 5». Затем вы добавляете «количество циклов 4» спереди. И так далее
2. как вы думаете
"loopcount: " loopCount "<br>" target.innerHTML
, что делает3. Потому
console.log
что добавляет сообщения в конце, но вашаinnerHTML
модификация добавляет его.
Ответ №1:
Ваша конкатенация здесь перепутана:
target.innerHTML = "loopcount: " loopCount "<br>" target.innerHTML;
Например, если существующий HTML равен 5, и вы добавляете к нему 4, результирующий HTML будет 4 5
. Используйте =
вместо этого, чтобы последующие итерации добавляли разметку в конец контейнера, а не добавляли ее к началу:
target.innerHTML = "loopcount: " loopCount "<br>";
Или, чтобы избежать необходимости повторно анализировать всю существующую разметку в контейнере на каждой итерации, используйте insertAdjacentHTML
вместо:
target.insertAdjacentHTML('beforeend', "loopcount: " loopCount "<br>");
Или вставьте <div>
s вместо <br>
s:
target.appendChild(document.createElement('div')).textContent = 'loopcount: ' loopCount;
Ответ №2:
Для того чтобы желаемый результат соответствовал вашему консольному выводу, вам нужно будет изменить вывод DOM на обратный. Код будет выглядеть так:
function lFunc() {
var loopCount = 5;
while(loopCount > 0) {
var target = document.getElementById("p3");
target.innerHTML = target.innerHTML "<br />loopcount: " loopCount;
console.log("loopcount is now: " loopCount);
loopCount = loopCount - 1;
}
}
какие результаты:
loopcount: 5
loopcount: 4
loopcount: 3
loopcount: 2
loopcount: 1
То, что у вас изначально было во время выполнения, будет выглядеть следующим образом:
target.innerHTML = "LoopCount: " loopCount "<br>" "LoopCount: 5<br>";
//where your "LoopCount: 5<br>" is the value of target.innerHTML
результатом будет:
LoopCount: 1<br>LoopCount: 2<br>LoopCount: 3<br>LoopCount: 3<br>LoopCount: 5<br>
какие результаты:
loopcount: 1
loopcount: 2
loopcount: 3
loopcount: 4
loopcount: 5