2012-02-04 17 views
3

同じ名前を持つすべての要素に影響を与える:jQueryのこれは私のhtmlファイル内のコードである

<div id="centerBlock"> 
     <block> 
      <site style="padding-top: 10px; margin-left: 20px"> 
       <img src="./images/site1.png" alt="some_text"/> 
      </site> 
      <textOnImage style="padding-top: 10px; margin-left: 20px"> 
       lolol 
      </textOnImage> 
     </block> 

     <block> 
      <site style="padding-top: 163px; margin-left: 20px"> 
       <img src="./images/site1.png" alt="some_text"/> 
      </site> 
      <textOnImage style="padding-top: 163px; margin-left: 20px"> 
       lolol 
      </textOnImage> 
     </block> 

    </div> 

そして、これが私のjavascriptです。しかし

$("block").mouseenter(function(){   
    $("site").fadeTo("slow", 0.25); 
    $("textOnImage").animate({ 
     opacity: "1" 
    }, 600); 
}); 

$("block").mouseleave(function(){   
    $("site").fadeTo("slow", 1); 
    $("textOnImage").animate({ 
     opacity: "0" 
    }, 600); 
}); 

、私は2つのブロックの1にカーソルを合わせると要素の両方が不透明になってしまい、マウスを元の状態に戻すよりもマウスを動かすと、元の状態に戻ります。私は何時間も検索しましたが、私は間違った言葉を検索してきたことを100%確信しています。どのように個別に行うのですか?

+0

あなたが選択は、私は新たなんだ、すべての – kobe

+0

のために行くことを、任意の特定のdiv idを与えていないので、 jqueryに、私はこれをどうやってやろうと教えてくれますか? – Ridz

+1

このサイトはかなり高速でインテリジェントな人がたくさんいますが、私は答えをタイプしようとしていましたが、あなたはすでにあなたが探しているものを持っています – kobe

答えて

4

thisを使用して、イベントをトリガーしたブロックのみを対象とし、.find()を使用して、その特定のブロック内の目的の要素を検索します。あなたがこれまでやっていたやり方は明らかに、すべてのsite要素と、すべてのページ内のすべてのtextOnImage要素を、イベントをトリガしたブロック内の要素だけでなく見つけていました。

$("block").mouseenter(function(){   
    var $this = $(this); 
    $this.find("site").fadeTo("slow", 0.25); 
    $this.find("textOnImage").animate({ 
     opacity: "1" 
    }, 600); 
}); 

$("block").mouseleave(function(){   
    var $this = $(this); 
    $this.find("site").fadeTo("slow", 1); 
    $this.find("textOnImage").animate({ 
     opacity: "0" 
    }, 600); 
}); 
+0

@Ridz、jfriendが投稿したので、これは現在のオブジェクトまたは現在のコンテキストを参照します。あなたがブロック上のmousenterを実行したとき、その中の要素を参照しているのは – kobe

+0

です。他の回答と同じですが、2番目のブロックにのみ影響します:/ – Ridz

+0

@Ridz - http: ://jsfiddle.net/jfriend00/ZLepq/。あなたの実際のページで動作していない場合は、あなたが私たちに表示していないコード/ HTMLに何か間違いがあります。 – jfriend00

2

ホバリングされた要素の構造にトラバースする必要があります。あなたはthisは、ハンドラがバインドされている要素への参照で、イベントハンドラ内でこのような.find() ...

$("block").mouseenter(function(){   
    $(this).find("site").fadeTo("slow", 0.25); 
    $(this).find("textOnImage").animate({ 
     opacity: "1" 
    }, 600); 
}); 

$("block").mouseleave(function(){   
    $(this).find("site").fadeTo("slow", 1); 
    $(this).find("textOnImage").animate({ 
     opacity: "0" 
    }, 600); 
}); 

を使用することができます。

.find()の代わりに.children()を使用することもできます。対象となる要素は1レベルしかないからです。


サイドノート、あなたは.hover()を使用しており、このような二つの機能を渡すことができます。..

$("block").hover(function(){   
    $(this).find("site").fadeTo("slow", 0.25); 
    $(this).find("textOnImage").animate({ 
     opacity: "1" 
    }, 600); 
}, 
    function(){   
    $(this).find("site").fadeTo("slow", 1); 
    $(this).find("textOnImage").animate({ 
     opacity: "0" 
    }, 600); 
}); 

あなたはおそらく、あなたのfadeToanimate呼び出し前にいくつか.stop()呼び出しを追加したいと思う、そうでないときマウスを素早く押したり外したりすると、アニメーションはキューにバックアップされます。

+0

いいえ、申し訳ありませんが、動作しません。それを見つけることによって、それは2番目の 'ブロック'にしか影響しませんし、子供を使っても何も起こりません。 – Ridz

+0

@Ridz:どういう意味ですか?ハンドラは '' centerブロック ''ではなく ''ブロック ''にバインドされています。 –

+0

コードをコンパクトにしてくれてありがとう。私は待ち行列のアニメーションを止める何かを探しようとしていました。しかし、再び、それは第2のブロックにしか影響しません。ブロックによって、私は163pxで始まる要素を意味します。 – Ridz

2

(特定の要素をターゲットにjqueryのセレクタにthisコンテキストを提供)、これを試してみてください:

$("block").mouseenter(function(){   
    $("site", this).fadeTo("slow", 0.25); 
    $("textOnImage", this).animate({ 
     opacity: "1" 
    }, 600); 
}); 

$("block").mouseleave(function(){   
    $("site", this).fadeTo("slow", 1); 
    $("textOnImage", this).animate({ 
     opacity: "0" 
    }, 600); 
}); 
+0

私と同じですが、答えは2番目の 'ブロック'にしか影響しません。 – Ridz

+0

@Ridz:あなたは3つの答えすべてに同じコメントを残しました。すべての回答が事実上同じなので、理由が同じである可能性があります。 [ここにデモがあります](http://jsfiddle.net/PpjSe/)あなたはそれが動作するのを見ることができます。 –

+0

私はcssファイル内の絶対位置属性を削除しましたが、今はうまくいくようです...とにかく、ありがとうございます:) – Ridz

関連する問題