在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 多條目用js設(shè)置className,來動態(tài)改變箭頭樣式時出錯

多條目用js設(shè)置className,來動態(tài)改變箭頭樣式時出錯

求大神調(diào)試https://codepen.io/xyj/pen/KR...

在沒改變下拉箭頭朝向時效果圖:
圖片描述

一切正常,點條目出現(xiàn)詳情?,F(xiàn)在我想在出現(xiàn)詳情時改變箭頭朝向。于是我想用改變className,調(diào)用不同樣式的方法,代碼如下:

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)
    }
}

開始點兩個條目沒事,后來就出現(xiàn)異常

Cannot set property 'className' of undefinedat HTMLDivElement

回答
編輯回答
冷咖啡

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

看我的,我的好了

原因在于
var triA = document.getElementsByClassName("tri1");獲取出來的數(shù)組,如果你把里面元素的class改變了的話,數(shù)組也就改變了,所以處理方法就是,把元素自己保留一下咯

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


給樓下補個圖,哈哈,順便試了試。一個實現(xiàn)的是HTMLCollection,一個是NodeList
clipboard.png

2018年8月17日 13:16
編輯回答
厭惡我

樓上把問題的原理都說清楚了不贅述了

why not嘗試一下document.querySelectorAll呢

2017年9月5日 22:13