javascript - 判断无序列表里是否包含某个类,并添加和删除类时遇到问题
ringa_lee
ringa_lee 2017-04-11 12:12:15
[JavaScript讨论组]
window.onload = function () {
    var Ul = document.getElementsByTagName('ul')[1];
    var oLi =Ul.getElementsByTagName('li');
    var oLi2 =Ul.getElementsByTagName('li')[2];
    addClass(oLi2,'d');//这个没问题

    for(var i = 0; i <= oLi.length; i++){   
        addClass(oLi[i],'d');
        removeClass(oLi[i],'c');
    } //这一块代码有问题,不知道原因

    function hasClass( elements,cName ){  
        return !!elements.className.match( new RegExp( "(\\s|^)" + cName + "(\\s|$)") );           
    };  
    function addClass( elements,cName ){  
        if( !hasClass( elements,cName ) ){  
            elements.className += " " + cName;  
        };  
    };  
    function removeClass( elements,cName ){  
        if( hasClass( elements,cName ) ){  
            elements.className = elements.className.replace( new RegExp( "(\\s|^)" + cName + "(\\s|$)" )," " );   
        };  
    };  
} 
ringa_lee
ringa_lee

ringa_lee

全部回复(3)
ringa_lee

这个很明显啊

for(var i = 0; i <= oLi.length-1; i++){//注意:length-1   而不是 length
    addClass(oLi[i],'d');
    removeClass(oLi[i],'c');
} 

循环的判断条件有问题,你一共有oLi.lenght个元素,从0开始,到oLi.length-1就够了。
这样导致oLi[oLi.length]的值为undefined,后面又读取它的属性,报错

巴扎黑

不知道为啥,总感觉是正则那块儿的问题= =

适用于 Edge,Chrome,Firefox,Safari

https://developer.mozilla.org...

其实直接用这个方法就好了。。element.classList.remove(cName)element.classList.add(cName)

天蓬老师
楼主我有几个问题~ 
1.你现在获取的是页面中第二个ul元素(TagName获取的元素下标从0开始),你确定么?
2. var oLi =Ul.getElementsByTagName('li');
var oLi =Ul.getElementsByTagName('li')[2];
写了两遍?此时oli应该是U1下的第三个li元素,而且长度为1,所以oLi.length=1;
3.也就是说 for(var i = 0; i <= 1; i++){...} 这样的for循环好像不是你想要的把~~~ 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号