-3

我什至对 jQuery 在元素上放置悬停属性的愚蠢方式感到惊讶。看看这个示例 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

4 回答 4

15

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

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

$('div.test').hover(function() {
    $(this).addClass('highlighted');
}, function() {
    $(this).removeClass('highlighted');
});
于 2009-06-14T20:00:38.973 回答
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 的回答无疑是要走的路。

于 2009-06-14T20:05:29.273 回答
3

你错误的地方在于认为 jQuery 试图取代 CSS。

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

于 2009-06-14T20:08:27.613 回答
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

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

于 2009-06-15T09:21:50.743 回答