我对appendChild
有疑问。在下面的代码中,我试图通过循环向div添加多个按钮元素,但我只得到一个按钮。我知道appendChild
是如何运作的。在developers.mozilla中,据说,如果元素已经存在,它将从其父元素中删除并重新设置。所以这就是我无法向节点添加多个相同元素(按钮)的原因。
所以这是我的问题,实现它的最佳方法是什么?
function Slide() {
this.currentStep = 0;
this.time = 2000;
this.images = [];
this.images[0] = 'images/image1.jpg';
this.images[1] = 'images/image2.jpg';
this.images[2] = 'images/image3.jpg';
this.images[3] = 'images/image4.jpg';
this.images[4] = 'images/image5.jpg';
let imagesCount = this.images.length;
let indicatorContainer = document.createElement('div');
indicatorContainer.classList.add('slide-indicator');
let buttonIndicator = document.createElement('button');
buttonIndicator.classList.add('button-indicator');
buttonIndicator.setAttribute('type', 'button');
for (let i = 0; i < imagesCount; i+=1) {
indicatorContainer.appendChild(buttonIndicator);
}
document.querySelector('.slide').appendChild(indicatorContainer);
}
Slide.prototype.carousel = function() { // arrow function-ov chi ashxatum ...uxxel
document.querySelector('.image').src = this.images[this.currentStep];
this.currentStep < this.images.length - 1 ? this.currentStep += 1 : this.currentStep = 0;
setTimeout(this.carousel.bind(imageSlide), this.time);
};
const imageSlide = new Slide();
imageSlide.carousel();
<div class="wrapper">
<div class="slide">
<img class="image" src="" width="1000" height="500" alt="image">
</div>
<div class="controls">
<button class="button prev" type="button">
previous
<span class="arrow arrow-prev"></span>
</button>
<button class="button next" type="button">
next
<span class="arrow arrow-next"></span>
</button>
</div>
</div>
答案 0 :(得分:-1)
在您的方法中,您在每个循环迭代中分配相同的buttonIndicator
而不创建任何新的循环迭代。你必须要做的是在每个循环迭代中创建新按钮,使其按照你想要的方式工作。
所以这应该有效:
for (let i = 0; i < imagesCount; i+=1) {
let buttonIndicator = document.createElement('button');
buttonIndicator.classList.add('button-indicator');
buttonIndicator.setAttribute('type', 'button');
indicatorContainer.appendChild(buttonIndicator);
}
使用const
代替let
更有意义,因为您没有重新设置这些变量。
答案 1 :(得分:-1)
使用cloneNode:
indicatorContainer.appendChild(buttonIndicator.cloneNode());