【问题标题】:jQuery optimize code of multiple hoverjQuery优化多次悬停代码
【发布时间】:2011-11-09 07:15:11
【问题描述】:

这是我的代码:

$('.tab_map1 area').hover(function(){
    $('#nav1').find('a').stop().toggleClass('hover', 500);
        return false;
});
$('.tab_map2 area').hover(function(){
    $('#nav2').find('a').stop().toggleClass('hover', 500);
        return false;
});
$('.tab_map3 area').hover(function(){
    $('#nav3').find('a').stop().toggleClass('hover', 500);
        return false;
});
$('.tab_map4 area').hover(function(){
    $('#nav4').find('a').stop().toggleClass('hover', 500);
        return false;
});

... (there's 8 of them)

我不想多次重复相同的代码,而是以某种方式对其进行优化。是否有机会将 .tab_map1-8 和 #nav1-8 替换为某个索引值?

我试过了:

var n = 8;
$('li.tab_map area').eq(n).hover(function(){
    $('#nav').eq(n).find('a').stop().toggleClass('hover', 500);
        return false;
});

和:

$("#navibar ul").each(function(index) {
$('.tab_map:eq(' + index + ') area').hover(function(index){
    $('#nav:eq(' + index + ')').find('a').stop().toggleClass('hover', 500);
        return false;
});
});

两者都不起作用。

【问题讨论】:

    标签: javascript jquery map indexing hover


    【解决方案1】:

    最简单的方法是在 1-8 范围内使用 for 循环。然后为每个索引建立选择器。例如

    for (var i = 1; i <= 8; i++) {
      var helper = function (sel, id) {
        $(sel).hover(function() {
          $(id).find('a').stop().toggleClass('hover', 500);
          return false;
        });
      };
    
      helper('.tab_map' + i + ' area', '#nav' + i);
    }
    

    【讨论】:

    • 不幸的是,它似乎不起作用。我想这是因为地图/区域 - 它们更难处理。这是它应该如何工作的实时示例:jsfiddle.net/LsAEu
    • @Annaccond 我的错。我对 javascript 循环捕获问题感到很满意。这是一个有效的小提琴。我会更新我的答案jsfiddle.net/LsAEu
    猜你喜欢
    • 2023-03-10
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2016-11-01
    相关资源
    最近更新 更多