2016-12-01 2 views
2

Привет, я пытаюсь сделать цикл for, который будет автоматически добавлять «точки» в зависимости от того, сколько изображений есть, я использую myArrImg.length, но он выводит только li с классом точек один раз, даже если он должен сделать это четыре раза? может кто-нибудь мне помочь :)Для циклов только петли 1 раз - JavaScript

var myArrImg = ['img/erftdgdf33.jpg','img/iajdi89.jpg','img/isdkfj01.jpg','img/wergf43.jpg']; 

function dotsAuto(){ 
    var test = document.getElementById('test'); 
    var li = document.createElement('li'); 
    li.className = 'dots'; 

    for (i = 0; i < myArrImg.length; i++) { 
    test.appendChild(li); 
    } 
} 
dotsAuto(); 
+8

Вы только когда-либо создать один 'li' и добавьте его повторно к одному и тому же родителю, тем самым заставляя его выглядеть так, как будто это произошло только один раз. Создайте 'li' внутри цикла. –

+0

@NiettheDarkAbsol Почему вы не поставили это вместо ответа? Просто чтобы получить нравы? Это ответ, вы все равно получите их – Hydro

+0

@FREEZE tbh Я не уверен. Где-то в последние несколько месяцев я как-то прекратил отвечать на большинство вопросов полностью и просто написал комментарии к простым, как это. Как ... вопросы, которые не особенно полезны людям в целом, или, может быть, я слишком осуждаю? Я не знаю. При репутации 211k, зачем мне нужно больше? XD –

ответ

3

Ваша проблема не в том, что вы думаете. Цикл работает правильное количество раз, но он не делает то, что вы намереваетесь.

Проблема в том, что вы создаете только один элемент li. Затем вы повторно вставляете в тот же элемент. Поэтому браузер думает, что вы делаете это:

Создать элемент li. Дайте ему className. Теперь начните цикл через массив myArrImg. В первый раз вставьте этот элемент li. Во второй раз вставьте этот элемент li. В третий раз вставьте этот элемент li. И так далее.

Необходимо каждый раз создавать новые элементы li, поскольку любой элемент может существовать только один раз в документе. По сути, вы держите удаления элемента из документа и положить его обратно в том же месте, чтобы создавать новые элементы каждый раз, создать li внутри цикла:

var li; 

for (i = 0; i < myArrImg.length; i++) { 
    li = document.createElement('li'); 
    li.className = 'dots'; 
    test.appendChild(li); 
} 
1

Здесь я создал ул, поскольку JSFiddle не позволяет манипулировать документ, но процесс такой же

var myArrImg = ['img/erftdgdf33.jpg','img/iajdi89.jpg','img/isdkfj01.jpg','img/wergf43.jpg']; 
 

 
function dotsAuto(){ 
 
    var test = document.getElementById('test'); 
 

 

 
    for (i = 0; i < myArrImg.length; i++) { 
 
    var li = document.createElement('li'); 
 
     li.className = 'dots'; 
 
     li.innerHTML = myArrImg[i]; 
 
\t test.appendChild(li); 
 
    } 
 
} 
 
dotsAuto();
<ul id="test"> 
 

 
</ul>

В основном вы создаете ONE li для цикла цикла EACH, а затем добавьте его в список

Смежные вопросы