首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaScript循环遍历ID中有数字的元素

使用JavaScript循环遍历ID中有数字的元素
EN

Stack Overflow用户
提问于 2015-01-22 16:07:29
回答 2查看 105关注 0票数 0

我有兴趣骑自行车通过我的页面上有号码在ID中的一些div。

这就是我目前所拥有的..。

代码语言:javascript
复制
    var count = 1;

    while(count != 12) {
        $('#logo-'.concat(count).concat(' > img')).click(function() {
            if($('#info-'.concat(count)).hasClass('dropdown-active')) {
                $('#info-'.concat(count)).slideUp();
                $('#info-'.concat(count)).removeClass('dropdown-active');
            } else {
                $('#info-'.concat(count)).slideDown();
                $('#info-'.concat(count)).addClass('dropdown-active');
            }
            return false;
        });

        count++;
    }

计数似乎在到达if语句时停止工作。

所以页面上的ID是logo-1,INF-1,logo-2,INF-2,等等.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-22 16:14:09

您可以更干净地这样做,如下所示:

代码语言:javascript
复制
while(count != 12) {
    $('#logo-' + count + ' > img').click(function() {
        var origin = $(this).parent(),
            targetId = '#info-' + origin[0].id.substring(5),
            target = $(targetId);
        if(target.hasClass('dropdown-active')) {
            target.slideUp();
            target.removeClass('dropdown-active');
        } else {
            target.slideDown();
            target.addClass('dropdown-active');
        }
        return false;
    });

    count++;
}

但是最好给您所有的徽标相同的类(例如,“徽标”),然后您可以放弃while循环:

代码语言:javascript
复制
$('.logo > img').click(function() {
     var origin = $(this).parent(),
         targetId = '#info-' + origin[0].id.substring(5),
         target = $(targetId);
     if(target.hasClass('dropdown-active')) {
         target.slideUp();
         target.removeClass('dropdown-active');
     } else {
         target.slideDown();
         target.addClass('dropdown-active');
     }
});

编辑:正如KarléGagnon在评论中指出的那样,您也可以使用$('[id^="logo-"]')作为给他们提供类的替代方法,并且仍然使用不同时循环的方法。

解析in中的数字的一个替代方法是将数字存储在data-num属性中:

代码语言:javascript
复制
<div class='logo' data-num='1'>...</div>

然后,用子字符串方法代替var origin...内容,您将拥有:

代码语言:javascript
复制
var num = $(this).parent().data('num'),
    target = $('#info-' + num);
票数 6
EN

Stack Overflow用户

发布于 2015-01-22 16:21:08

虽然JLRishe的回答更可取,但这里主要是用闭包来实现这一点的学术演示:

代码语言:javascript
复制
var count = 1;

while(count != 12) {
    (function(id){
        $('#logo-'.concat(id).concat(' > img')).click(function() {
            if($('#info-'.concat(id)).hasClass('dropdown-active')) {
                $('#info-'.concat(id)).slideUp();
                $('#info-'.concat(id)).removeClass('dropdown-active');
            } else {
                $('#info-'.concat(id)).slideDown();
                $('#info-'.concat(id)).addClass('dropdown-active');
            }
            return false;
        });
    }(count));

    count++;
}

通过调用一个函数并将该值作为参数传递,您将创建一个新的作用域,因此id将在click函数中维护它的值。我不一定推荐这种方法(除此之外,您的代码中还有许多效率低下的地方),但希望这是闭包和范围的有趣演示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28093382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档