2016-04-14 4 views
0

Мой вопрос: Можно ли добавить один и тот же элемент без перезаписи той же переменной. Я создаю слайдер, и мне нужно добавить div с классом slide-el в блок slider. Вот часть кодаКак appendChild (element) много раз. (Тот же самый элемент)

var body, html, sliderBody, btnLeft, btnRight, i, parts, vHeight, vWidth; 
//Variable definitions 
var i = 0, 
    parts = 3, 

    //Main html elements 
    body = document.body, 
    html = document.element, 

    //viewport Height and Width 
    vHeight = window.innerHeight, 
    vWidth = window.innerWidth, 

    sliderBody = _id("slider"), 
    btnLeft = _id("btn-left"), 
    btnRight = _id("btn-right"), 

    urls = ["http://www.wallpapereast.com/static/images/pier_1080.jpg", 
      "http://www.wallpapereast.com/static/images/pier_1080.jpg", 
      "http://www.wallpapereast.com/static/images/pier_1080.jpg", 
      "http://www.wallpapereast.com/static/images/pier_1080.jpg"]; 

    slide = _createEl("div"); 
    slide.className += "slide-el"; 

function _id(el){ 
    return document.getElementById(""+ el +""); 
} 
function _createEl(el){ 
    return document.createElement(""+ el +""); 
} 
window.onload = function(){ 
    slideLayout(); 
} 

function slideLayout(){ 
    for(var i=0; i < urls.length; i++){ 
    sliderBody.appendChild(slide); 
    } 
} 

Проблема заключается в том, что я не могу добавить один и тот же элемент, который во много раз. Он создает один элемент вместо 4.

Для вас, чтобы лучше понять, я сделал скрипку:

https://jsfiddle.net/ud7dvn3z/

+1

расширить свое присутствие на комментарий @ smerny: чем '.cloneNode()' метод узла возвращает копию узла, а не сам узел, что позволяет использовать те же базовый узел несколько раз. Чтобы скопировать дочерние элементы узла, вам нужно использовать 'slide.cloneNode (true)' для выполнения глубокой копии. – shamsup

ответ

2

appendChild удалит узел из везде, где это перед добавлением его в новое место, так что вам нужно сделать копии узла вместо. Вы можете использовать cloneNode для этого:

for(var i=0; i < urls.length; i++){ 
    sliderBody.appendChild(slide.cloneNode()); 
} 
0

Okey ребята! Я нашел ответ. Я должен поставить

slide = _createEl("div"); 
slide.className += "slide-el"; 

for петля. Теперь это выглядит следующим образом:

for(var i=0; i < urls.length; i++){ 
    slide = _createEl("div"); 
    slide.className += "slide-el"; 
    sliderBody.appendChild(slide); 
} 
Смежные вопросы