2016-03-06 76 views
2

我正在尝试使用vanilla JS制作感言模块,当我对收藏使用“for”循环时,出现问题 - 控制台写道感言[i] .nextElementSibling为空。当我手动设置collection元素的索引时它没有问题 - 它可以工作。nextElementSibling为null

<section class="testimonials-wrap">  
      <h2>testimonials</h2> 
      <div> 
       <p class="active">Mauris quis nulla ut dui luctus euismod ac sit amet diam. Nulla ullamcorper tortor nec.</p> 
       <p>Vivamus aliquet massa nec odio sagittis, eget faucibus metus malesuada. Nam sed neque pellentesque, cursus.</p> 
       <p>Sed bibendum nec ligula sit amet accumsan. Sed neque est, commodo sed tortor in, tincidunt.</p> 
      </div> 
     <ul> 
      <li class="next"><i class="fa fa-chevron-right"></i></li> 
      <li class="prev"><i class="fa fa-chevron-left"></i></li> 
     </ul> 
</section> 

function goToTheNextTest(){ 
    var testimonials = document.getElementsByClassName("testimonials-wrap")[0].getElementsByTagName("div")[0].getElementsByTagName("p"); 
    for(var i = 0; i < testimonials.length; i++){ 
     if(testimonials[i].className === "active"){ 
      testimonials[i].className = ""; 
      //testimonials[i].nextElementSibling.className = "active"; 
     } 
    } 
} 
+0

你有没有检查'推荐[i]'中会出现什么? –

+0

不,我没有。如何更好地做到这一点? – Leo240

+1

'var testimonials = document.querySelectorAll(“。testimonials-wrap> div> p”);' –

回答

1

只要改变以这种方式循环。

for(var i = 0; i < testimonials.length-1; i++) 
1

这是因为你试图让下一个元素在你的循环,但目前还没有更多可用的元素,因此:

if (i !== testimonials.length -1) { 
     testimonials[i].nextElementSibling.className = "active"; 
} 

基本上只能得到下一个元素同级如果它是不是最后一次迭代;所以如果你有3个要素,不要试图获得4

tesimonials.length是3,所以我们减去1