JQuery:没有悬停的悬停

时间:2009-06-14 19:55:39

标签: javascript jquery hover

我甚至对jQuery将hover属性放在元素上的愚蠢方式感到惊讶。看看这个示例CSS:

div.test
{
   width: 20px;
   height: 20px;
   color: #000000;
   background: #FFFFFF;
}
div.test:hover
{
   color: #FFFFFF;
   background: #CC0000;
}

如果我们想将其转换为jQuery,我们必须输入以下内容:

$('div.test').css({
   'width' : '20px',
   'height' : '20px',
   'color' : '#000000',
   'background' : '#FFFFFF'
});
$('div.test').hover(function() {
   $(this).css({
      'color' : '#FFFFFF',
      'background' : '#CC0000'
   });
}, function() {
   $(this).css({
      'color' : '#000000',
      'background' : '#FFFFFF'
   });
});

有没有更好的方法呢?写出明显的东西感觉很蠢。

提前谢谢。

4 个答案:

答案 0 :(得分:15)

你接近这个错误的方式。你可以像这样定义一个CSS类

.highlighted
{
   color: #FFFFFF;
   background: #CC0000;
}

$('div.test').hover(function() {
    $(this).addClass('highlighted');
}, function() {
    $(this).removeClass('highlighted');
});

答案 1 :(得分:3)

你也可以编写以下简单插件来做你想做的事情(自动取消悬停):

$.fn.easyHover = function(cssProps){
   return this.each(function(){
       var $t = $(this);
       var oldProps = {};
       for(x in cssProps)
          oldProps[x] = $t.css(x);
       $t.hover(function(){
          $(this).css(cssProps);
       }, function(){
          $(this).css(oldProps);
       });
   }
}

然后您可以像这样使用它:

$('#elem').easyHover({color:'#000', background:'#ccc'});

然而,Praveen的回答肯定是要走的路。

答案 2 :(得分:3)

你误以为jQuery试图取代CSS。

jQuery没有“添加悬停标记”,它只是为JavaScript的悬停事件提供处理程序(IIRC它实际上是mouseover / mouseout的抽象)。如果你想用JS模拟CSS的hover伪选择器,jQuery通过为你提供一个易于使用的事件处理程序绑定来为你提供便利。

答案 3 :(得分:2)

我想另一种方法是:

// In you stylesheet, just define the default properties
div.test
{
   width: 20px;
   height: 20px;
}

然后,创建一个简单的对象包装器来保存您要使用的属性

var hoverHelper = (function () {
   var styles = {
      hoverStyle: {
         'color' : '#FFFFFF',
         'background' : '#CC0000'
      },
      defaultStyle: {
         'color' : '#000000',
         'background' : '#FFFFFF'
      }
   };

   return {
      init: function (selector) {
         $(selector).hover(
            function () {
               $(this).css(styles.hoverStyle);
            },
            function () {
               $(this).css(styles.defaultStyle);
            }
         );
      }
   };
}());

hoverHelper.init('.hoverElementClass'); // Apply the hover functions
                                        // to all matching elements

这样,至少可以将样式定义保存在一个地方。