javascript - 大家帮忙看看这段代码为什么一直提示错误
伊谢尔伦
伊谢尔伦 2017-04-11 12:48:26
[JavaScript讨论组]

我查了好久都没发现那里有不对

var arr = $(".menu-bottom").find("li");
         //alert(arr.length)
        $(".menu-bottom").find("li").click(function(){

            
            for(var i = 0;i

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(8)
怪我咯

'arr[i]'不是 jQuery 对象,要用 'arr.eq(i).hasClass()'。

阿神

为什么要在里面写个循环。。。

    var li = $(".menu-bottom").find("li");
    li.click(function(){
        li.removeClass("on")  //直接都移除 就好了
        $(this).children("p").find("p").addClass("on");   //然后再添加
    })
怪我咯

这段代码可能是如闭包引起的,你再for循环的第一行打印一下i看他每次输出是不是都是一样的。

PHP中文网

var arr = $(xxxxx),用的 jquery?
那么 arr[i] 是一个 dom ,没有 hasClass 方法
可以用 arr.eq(i).hasClass()

PHP中文网

Jquery已经帮你全部绑定了而你还多此一举。。不用做循环

天蓬老师
arr.each(function (item) {
    if ($(this).hasClass('on') {
        $(this).removeClass('on')
    }
})
PHP中文网

其实完全没必要用if来判断有没有,直接去移除就好了,如果没有打电话,会自动掠过,还有,感觉这代码也不用jq来写的吖…原生js能完美胜任的

PHPz

既然 arr 是一个 jQuery 对象,那比较推荐的遍历是用 arr.each()

arr.each(function() {
    var el = $(this);
    if (el.hasClass("on")) {
        el.removeClass("on");
    }
});

但是仍然有三个地方需要改进

  1. removeClass 之前没必要去判断一下,反正如果没有也不会有啥效果。

  2. 既然 ES6 已经出来这么久了,考虑兼容 ES6 的 Lambda 写法,不用 $(this),改用参数

好简洁的写法

arr.each((i, el) => $(el).removeClass("on"));
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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