【Web前端问题】多条目用js设置className,来动态改变箭头样式时出错

求大神调试https://codepen.io/xyj/pen/KR...

在没改变下拉箭头朝向时效果图:
图片描述

一切正常,点条目出现详情。现在我想在出现详情时改变箭头朝向。于是我想用改变className,调用不同样式的方法,代码如下:

window.onload = function(){

var details = document.getElementsByClassName("detail");

var items = document.getElementsByClassName("items");

var flex = document.getElementsByClassName("flex");

var triA = document.getElementsByClassName("tri1");

var triB = document.getElementsByClassName("tri2");

j = [1,1,1,1]

for (var i = 0; i < details.length; ++i){

(function(i){

console.log(triA[i]);

details[i].addEventListener("click",function(){

if(j[i] > 0){

items[i].style.display = "block";

flex[i].innerText = "收起";

triA[i].className = "tri3";

triB[i].className = "tri4";

j[i] = -j[i];

}

else if (j[i] < 0){

items[i].style.display = "none";

flex[i].innerText = "展开";

triA[i].className = "tri1";

triB[i].className = "tri2";

j[i] = -j[i];

}

})

})(i)

}

}

开始点两个条目没事,后来就出现异常

Cannot set property 'className' of undefinedat HTMLDivElement

回答:

https://codepen.io/linong/pen...

看我的,我的好了

原因在于
var triA = document.getElementsByClassName("tri1");获取出来的数组,如果你把里面元素的class改变了的话,数组也就改变了,所以处理方法就是,把元素自己保留一下咯

clipboard.png
https://developer.mozilla.org...


给楼下补个图,哈哈,顺便试了试。一个实现的是HTMLCollection,一个是NodeList
clipboard.png

回答:

楼上把问题的原理都说清楚了不赘述了

why not尝试一下document.querySelectorAll呢

以上是 【Web前端问题】多条目用js设置className,来动态改变箭头样式时出错 的全部内容, 来源链接: utcz.com/a/135219.html

回到顶部