2011-09-02 43 views
2

的jQuery的优化代码,这里是我的代码:多个悬停

$('.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; 
}); 
}); 

两个不起作用。

回答

2

最简单的方法是在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); 
} 
+0

不幸的是,它似乎并没有工作。我想这是因为地图/区域 - 他们很难处理。这里是活的例子它应该如何工作:http://jsfiddle.net/LsAEu/ – Annaccond

+0

@Annaccond我的坏。我觉得正确的JavaScript循环捕获问题。这是一个小提琴的作品。我会更新我的回答http://jsfiddle.net/LsAEu/ – JaredPar