JQuery for slidedown() 中的 css 类名循环

标签 jquery css

是否可以创建一个 for 循环,它将遍历循环并将特定代码分配给不同的 css 类?

我的 css 类是在 template.css 文件中定义的(有 100 个具有相似名称的类),所以很明显它应该看起来像下面的代码,顺便说一下,哪个没有什么?

for(i=1;i<101;i++) {
    $(document).ready(function () {  
        $('.inner' + i).hide(); 
        $('.outside' + i).hover(
            function () {
                $('.inner' + i, this).stop(true, true).slideDown(200);
            },
            function () {
                $('.inner' + i, this).stop(true, true).slideUp(200);            
            });
    });
}

顺便说一句,我的类(class)是: 外面 1,外面 2,外面 3 ... 内层 1、内层 2、内层 3...

最佳答案

是的,这是可能的,但是由于 JavaScript 中一个非常常见的陷阱,您的代码将失败:循环的每次迭代都会创建一系列函数,并且这些函数中的每一个都关闭相同变量。稍后,当函数执行时,它们的单个共享实例 i 都将具有相同的值,即 100

您需要将i 的唯一实例传递给您的每个内部函数,使用immediately-invoked function expression, or IIFE 可以最轻松地做到这一点。 .

$(function () { // this is the same as $(document).ready

  for (var i = 0; i < 100; ++i) {
    (function (i) {
        $('.inner' + i).hide(); 
        $('.outside' + i).hover(
            function () {
                $('.inner' + i, this).stop(true, true).slideDown(200);
            },
            function () {
                $('.inner' + i, this).stop(true, true).slideUp(200);            
            });
     }(i));
  }

});

请注意,我已将 $(document).ready 移到您的 for 循环之外;这是一个附带的优化,与解决方案没有直接关系,但绝对值得。将 100 个回调绑定(bind)到 $(document).ready 是没有意义的,您的代码就是这样做的,因为您可以简单地将整个循环移动到一个回调中。

关于JQuery for slidedown() 中的 css 类名循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23202781/

相关文章:

javascript - 如何选择具有指定文本的元素

BlogSpot 中的 JavaScript/Jquery 在移动浏览器中不工作

javascript - JQuery - 使用 cookie 和窗口宽度在选项卡溢出上进行响应式导航

html - 将 div 高度设置为位置为 : absolute in combination with CSS3 transitions 的内部 div

css - 如何居中定位?

javascript - Jquery DOM 操作 还有比这更好的吗?

Javascript,如何旋转我的箭头 div?

javascript - jQuery 验证同一字段的条件错误消息

css - 如何在 chrome 自动完成上删除蓝色背景

html - Bootstrap Nav Bar 无法在 ie 上工作