搜索
javascript - jquery在循环中取i值
伊谢尔伦
伊谢尔伦 2017-04-10 16:22:11
[JavaScript讨论组]
for(var i=0;i<slideLength;i++){
        $(".slide").eq(i).index=i;
        $(".slide").eq(i).on("click",function(){
            console.log($(this).index);
        });
    }

我想问一下,我用$(".slide").eq(i)这句话来取第i个节点,还有其他方法吗,最重要的是console.log($(this).index); 这个是不存在的,我想问一下为什么呢??

伊谢尔伦
伊谢尔伦

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

全部回复(6)
天蓬老师

我们从实际的应用来表达一下你的意思吧
举个栗子,有这样一堆li

<ul class="list">
    <li>Bootstrap</li>
    <li>jQuery</li>
    <li>gulp</li>
    <li>angular</li>
</ul>

我希望点击每个li,都能够在控制台中输出li的内容,于是可以这样写

$(function() {
    $('.list').on('click', function(e) {
        console.log($(e.target).html());
    })
});

你运行试试看,效果已经达到了。
这里运用了事件委托的思想,在点击时,使用 $(e.target)来判断被点击的对象
其中 e.target是DOM对象,表示的是被点击的li,
$(e.target)当然就是被点击那个li的jQuery对象了

也许在其他的一些应用场景中,你需要得到被点击li的序列,比如幻灯片切换效果的那一堆小按钮,除了在li中直接设置1,2,3,4之外,现在还流行一种做法,就是设置诸如data-item之类的属性值

整个例子的完整代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="js/jquery-2.0.3.js"></script>
</head>
<body>
    <ul class="list">
        <li>Bootstrap</li>
        <li>jQuery</li>
        <li>gulp</li>
        <li>angular</li>
    </ul>
</body>
<script>
$(function() {

    $('.list li').each(function(i) {
        $(this).attr('data-item', i);
    })

    $('.list').on('click', function(e) {
        var $curLi = $(e.target);
        console.log($curLi.html()); //输出当前li的值
        console.log($curLi.attr('data-item')); //输出当前li的序列
    })
});
</script>
</html>
巴扎黑

for(var i=0;i<slideLength;i++){
    $(".slide").eq(i).attr("index",i);
      $(".slide").eq(i).on("click",function(){
          console.log($(this).attr("index"));
      });
}

试试看

.index添加自定义属性是js的方式。
jquery对属性操作不是attr么。

巴扎黑

你这代码有很大的优化空间啊,
$(".slide").each(function(i){
$(this).attr('index',i).on('click',function(){

 Console.log($(this).attr('index'));

})
});

天蓬老师
// each 每个 .slide 增加 data('index') 值
$('.slide').each(function(idx){
  $(this).data('index') = idx;
}).on('click', function(){
  // 绑定事件的时候不需要each, jquery会做这一部分
  console.log($(this).data('index'));
})
ringa_lee

要用闭包把循环的包裹起来

黄舟

获取序号不是有index()么。。

$(".slide").on("click",function(){
      console.log($(this).index());
  });
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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