2012-04-30 8 views
4

私が実際に何をしているのは、カーソルがタイプ「テキスト」に変わったとき、つまりテキストの上にカーソルを置いたときを検出することです。私はホバリングしている要素の型を調べてみましたが、実際に何が入っているのかわからないので、これはあまり正確ではありません。テキストの上にマウスを乗せているかどうかを検出する方法はありますか?

CSSカーソル属性の検出は、以前に私によって割り当てられている場合にのみ可能であることを理解しています。

これはまったく可能ですか?あなたはこれについてどうやって行きますか?

EDIT: 私は現在特定の要素を超えている場合、その要素内のテキストにカーソルを合わせるかどうかを知りたいと思っています。 divはブラウザの100%の幅にすることができますが、一番左側のテキストは短くします。私は要素のちょうど一部の上にホバリングするときを検出したくない。

+2

ユースケースについて説明すると、より良い回答が得られるはずです。あなたは間違った方法で問題を見ているかもしれません。 –

+0

mouseover http://api.jquery.com/mouseover/ –

+0

重複:http://stackoverflow.com/questions/3395293/check-cursor-is-over-element – mgraph

答えて

2

カーソルが変更されたかどうかを検出する必要はありません。

マウスはコンストラクトのこの種を使用してテキストをホバリングされている場合は、単純に検出することができます:

document.getElementById('myTextId').onmouseover = function() { 
    // do something like for example change the class of a div to change its color : 
    document.getElementById('myDivId').className = 'otherColor'; 
}; 

あなたはIDが、クラスまたはタグを持っていない場合、あなたはのgetElementsByClassNameでgetElementByIdをを置き換えることができますまたはgetElementByTagName(あなたが反復処理する配列を返します)。

要素を離れるときに色を復元する場合は、同じ方法でonmouseoutイベントをバインドすることをお勧めします。あなたが任意の段落に何かをしたい場合は

たとえば、あなたがそれを行うことがあります。私はあなたがこのようなものの多くを行うことを計画

var paras = document.getElementByClassName('p'); 
for (var i=0; i<paras.length; i++) { 
    paras[i].onmouseover = function() { 
     // do something like for example change the class of a div to change its color : 
     document.getElementById('myDivId').className = 'otherColor'; 
    }; 
} 

、私はあなたがjQueryとそのチュートリアルで見てください。

+1

私は、これは質問が求めているものではないと確信しています。使用するIDやセレクタはなく、カーソルが「テキスト」の上にくるたびに検出する必要があります。残念ながら私はこれが可能だとは思わない。 –

+0

@JamesMontagneあなたが正しいです、私は十分ではない場合は申し訳ありません。 – Challe

+0

任意のテキスト、いいえ。しかし、それは何も意味しません。だから私は、特定のテキストが必要だと思う。それが私がクラスやタグで検索した理由です。通常、 "

"のようなものがあり、getElementsByClassNameを使用できます。 –

0

あなたはjQueryのを使用している場合(jQueryのは素晴らしいですので、あなたがすべき、)は、次の操作を行います

$("#myDiv").mouseover(function() { 
    $("#myDiv").css("background-color", "#FF0000"); 
}); 
+1

JQueryは、javascriptを初めて使う人にとっては大丈夫ですが、ブラウザ間の互換性のためのすべてのコードを既に覚えていれば、読み込み速度が不必要に悪くなります。 –

0

1つの可能な方法は、あなたのDOM内のすべてのテキストノードを見つけるとスパンでそれらをラップすることです特定のクラスで。そして、あなたはそのクラスを選択して、あなたはそれでやりたいことができます:

// Wrap all text nodes in span tags with the class textNode 
(function findTextNodes(current, callback) { 
    for(var i = current.childNodes.length; i--;){ 
     var child = current.childNodes[i]; 
     if(3 === child.nodeType) 
      callback(child); 
     findTextNodes(child, callback); 
    } 
})(document.body, function(textNode){ // This callback musn't change the number of child nodes that the parent has. This one is safe: 
    $(textNode).replaceWith('<span class="textNode">' + textNode.nodeValue + '</span>'); 
}); 

// Do something on hover on those span tags 
$('.textNode').hover(function(){ 
    // Do whatever you want here 
    $(this).css('color', '#F00'); 
},function(){ 
    // And here 
    $(this).css('color', '#000'); 
}); 

JSFiddle Demo

明らかにこれは、spanタグの多くのあなたのDOMを記入し、あなただけのページのロードに一度これをやってみたいですなぜなら、もう一度実行すると、スパンの数が倍になるからです。これは、スパムに既に適用されているカスタムCSSを使用している場合、奇妙なことを行う可能性もあります。

+1

これらの 'span'(nuke =インラインスタイルの'!important'を少なくとも使ってください)に適用されるスタイルには、堅実なCSSリセットがある方がよいでしょう – FelipeAls

+0

基本的に私はコメントに言及していました。これは基本的には一般的には機能しますが、おそらく本当に悪い考えです。私は本当にこの機能がどれほど重要かを考えています。 –

+0

@JamesMontagneええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええん、あなたがテキストノードにイベントを追加することはできないので、これを達成するにはこれが唯一の方法だと私が知っている限り。 – Paulpro

関連する問題