質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

4110閲覧

IEでマウスカーソル位置にある要素を(タグ種別に拘わらず)取得する方法

takeyoshi

総合スコア27

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2015/07/15 03:04

今カーソルが乗っている位置にある全ての要素を取得したいです。

$(':hover')

とセレクタを指定しロジックを組みましたが
IEでは上手くいきません。
(アンカー以外の要素情報がとれません。hoverの性質からすれば正しい動きなのでしょうが、、)

IEでも、今現在マウスカーソルが乗っている位置にある要素を取得する方法はありませんでしょうか?

---- 具体的にやりたいこと ---

ある要素群からマウスポインタが外れたら、処理を発行したいのです。

さらに具体的に言えば

(1).ある要素をクリックすると、編集用メニューペインがモーダルで表示される
(2).以下の条件がそろったらペインを消す
・クリックした要素からカーソルが外れた
・編集用メニューペイン上にカーソルが無い(つまり他の要素へカーソルを移動させた)

やったこと
1.要素/ペインに共通のCSSクラスを持たせています。
2.ペインを表示する処理内でこのようにマウスカーソルが外れた際の処理を書いています。

lang

1 $(要素).mouseout(function(){ 2 if($(':hover').hasClass('共通で持たせているCSSクラス')==false){ 3 ペインを非表示にする処理 4 } 5 });

編集用ペイン上にマウスカーソルがあることが取得出来れば動くのですが、、
IEでは$(':hover')に何も入ってこない状態です。

→ つまり編集ペイン上にカーソルを持っていくと、ペインが消えます、、


IEでもマウスカーソル位置にある要素を(タグ種別に拘わらず)取得する方法、ご存知の方がいらっしゃいましたらご教示ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

マウスカーソル位置にある要素を取得する方法ではないのですが、
私だったら、ペインの要素をクリックする要素の中に入れて、 以下のようにすると思います。

lang

1 $("要素").click(function(){ 2 $("ペイン").show(); 3 }); 4 $("要素").mouseleave(function(){ 5 $("ペイン").hide(); 6 });

中に入れるのが難しい場合は以下のようにすると思います。

lang

1 $("要素").click(function(){ 2 $("ペイン").show(); 3 }); 4 $("ペイン").mouseenter(function(){ 5 $("ペイン").show(); 6 }); 7 $("要素, ペイン").mouseleave(function(){ 8 $("ペイン").hide(); 9 });

投稿2015/07/15 03:53

編集2015/07/15 04:15
ina

総合スコア127

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takeyoshi

2015/07/15 05:30

ありがとうございます! ご教示の通り「mouseleave」イベントを利用することによって解決出来ました。 --- 恥ずかしながら、「mouseenter」「mouseleave」イベントについて良く把握していませんでした。 指定した要素とマウスポインタの関係で処理をするなら「mouseenter」「mouseleave」ですね!ありがとうございます! --- 他の処理との兼ね合いもあり以下のように指定したら上手く行きました。 ~ 前段処理でペインは表示されている ~ ここからイベントハンドラ登録 // show/hide controle $(ペイン).mouseenter(function(){ $(ペイン).show(); }); $(要素).mouseleave(function(){ $(ペイン).hide(); }); $(ペイン).mouseleave(function(){ $(ペイン).hide(); }); これでペインかつ要素をカーソルが離れるとペインが消えるようになりました。 ありがとうございました。
ina

2015/07/15 06:58

解決されたようで良かったです。
guest

0

例えば #a をクリックすると #b が表示され、マウスカーソルが #b を外れたら #b が非表示になる、ということですよね?

以下のようなコードが定番かと思います。

lang

1// a をクリックしたら b を表示する 2$('#a').on("click", function(){ 3 $('#b').show(); 4}); 5 6// b の上でマウスカーソルが動いたらバブリングを停止する 7$('#b').on("mousemove", function(ev){ 8 ev.stopPropagation(); 9}); 10 11// 任意の場所でマウスカーソルが動いたら b を非表示にする 12// ただしマウスカーソルが b の上にあるときは処理されない 13$(document).on("mousemove", function(){ 14 $('#b').hide(); 15});

マウスカーソルが b の上にあるときはバブリングが止まるので document まで mousemove が伝わりません。
一方、b 以外の要素の上にマウスカーソルがある場合は、バブリングにより document の mousemove が処理されます。

投稿2015/07/15 04:06

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ngyuki

2015/07/15 04:23

よく考えたら、これなら mouseleave でいい気がする・・質問を読み違えているかもしれません(>_<)
takeyoshi

2015/07/15 05:31

ありがとうございます! おっしゃられる通り「mouseleave」イベントを活用することで解決出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問