简化下拉列表的js

时间:2014-02-17 11:55:40

标签: javascript jquery

我有一个非常基本的代码html代码用于下拉列表,可以看出here它有效,但有没有办法简化这个js代码?

$(document).ready(function() {

  var n = ".dropdown-menu", no = 'drop';

  $('.dropdown').click(function () {               
     if($(n).hasClass(no)) {                       
        $(n).removeClass(no);                      
     } else {
        $(n).addClass(no);                        
     }
   }).mouseover(function() {          
        $(n).addClass(no);                         
   }).mouseout(function() {                        
        if($(n).mouseover()){        
          $(n).removeClass(no);  
        }           
   })


});

请注意,我知道我只能通过添加一行来 css ..所以这不是问题。

 #navigation-top #navigation-holder li:hover > ul {
     display: block;
 }

4 个答案:

答案 0 :(得分:1)

我们可以使用toggleClass而不是add / remove class。 在下面的代码中,我们可以删除if检查并直接调用removeClass

if ($(n).mouseover()) { 
    $(n).removeClass(no);
}

所以最终的优化代码如下:

$('.dropdown').click(function () {
    $(n).toggleClass(no);
}).mouseover(function () {
    $(n).addClass(no);
}).mouseout(function () {
    $(n).removeClass(no);
})

Fiddle Demo

答案 1 :(得分:0)

$('.dropdown').click(function () {               
     $(n).toggleClass(no);
}).hover(
   function() {
      $(n).addClass(no);
   }, function() {
      $(n).removeClass(no);
   }
);

未经测试,但应该按照您的要求进行测试。

参考文献:

https://api.jquery.com/toggleClass/

https://api.jquery.com/hover/

答案 2 :(得分:0)

离开我的头顶,使用toggleClass()来优化班级切换

除了使用hover()替换mouseover& mouseout事件。

因此,您的代码将以这种方式结束:

$('.dropdown').click(function () {
    $(n).toggleClass(no);
}).hover(
function () {
    $(n).addClass(no);
}
,function () {
        $(n).removeClass(no);
}
);

JS小提琴链接:http://jsfiddle.net/g9zyd/4/

答案 3 :(得分:0)

您可以使用jQuery库中的toggleClass方法,以及执行任务的一些小技巧!

function rp(el){
  $(n).toggleClass(no, el.data);
}
var n = ".dropdown-menu",
    no = 'drop';
$('.dropdown').click(rp).mouseover(true, rp).mouseout(false, rp);   

尝试demo