2009-06-14 12 views
-3

私は、jQueryの要素にホバー属性を置くための愚かな方法について驚いています。このサンプルのCSSを見てみましょう:JQuery:ホバー解除せずにホバー

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

これを行うには、任意のより良い方法があるArn't ?明白なことを書くのはばかげている。

ありがとうございます。

答えて

15

これは間違った方法です。

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

あなたは、このようにそれを使用することができます。また、あなたはちょうどあなたが(自動unhovering)やりたいするには、次の簡単なプラグインを書くことができますので、

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

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

私はこの時点でJavaScriptを使用できます。これはまったく同じことですが、あなたはCSSクラスにスタイル属性を入れました。とにかくありがとうございました。 – Ivar

+10

「Javascriptだけができる」とは何ですか?あなたのページはCSSできませんか?どのようなばかげた制限がそれですか?あなたが求めていることを実行するための、受け入れられた正しい方法は、ここで説明されているものです。このような状況では、クラスの代わりに直接的なCSSスタイルを使うのは遠隔的には必要ありません。 –

+4

彼は「CSSクラスにスタイル属性を入れている」というわけではなく、CSSをスタイルシートに入れて、スタイリング。それは抽象と呼ばれ、時間を節約します。 スタイル、行動、コンテンツ、メイトの分離のベストプラクティスを学ぶことをお勧めします。 –

3

のようなCSSクラスを定義したいです:

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

しかし、Praveenの答えはdefenitly行く方法です。

+0

これは私が探しているものによく似ていますが、動作していないようです。 – Ivar

3

あなたが誤って考えているのは、jQueryがCSSを置き換えることです。

jQueryは「ホバータグを追加しません」というJavaScriptのホバーイベント(IIRCは実際にはmouseover/mouseoutの抽象化)のハンドラーを提供するだけです。 JSでCSSのホバー擬似セレクターをエミュレートする場合、jQueryを使用すると、使いやすいイベントハンドラーバインディングを簡単に作成できます。

+2

まさに、JQueryは魔法ではありません。 – Soviut

+0

私はjQueryの新機能ではなく、動作する方法を知っています。つまり、jQueryはこの単純な点を除いてすべての点でとてもスマートです。 – Ivar

+0

@larska:実践的にも概念的にもあなたを援助しようとする人がたくさんいますが、あなたは憤慨しています。どうしたの? –

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 

をこのように使用するプロパティを保持する単純なオブジェクトラッパーを作成し、少なくともあなた1つの場所にスタイル定義を保持する。

+0

私は何ができるかを見ていきます。ありがとうございました! – Ivar