Comment puis-je obtenir le nom de classe de l'élément actuel qui se trouve au survol de la souris? Par exemple
Quand une souris passe de div à a, je veux obtenir le nom de classe d'un élément div. Comment l'obtenir en utilisant jQuery?
Voici ma version:
function handler(ev) {
var target = $(ev.target);
var elId = target.attr('id');
if( target.is(".el") ) {
alert('The mouse was over'+ elId );
}
}
$(".el").mouseleave(handler);
function handler(ev) {
var target = $(ev.target);
var elId = target.attr('id');
if( target.is(".el") ) {
alert('The mouse was over'+ elId );
}
}
$(".el").mouseleave(handler);
.el{
width:200px;
height:200px;
margin:1px;
position:relative;
background:#ccc;
float:left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hover an element and refresh the page, than move your mouse away.</p>
<div id="element1" class="el"></div>
<div id="element2" class="el"></div>
<div id="element3" class="el"></div>
<div id="element4" class="el"></div>
<div id="element5" class="el"></div>
<div id="element6" class="el"></div>
<div id="element7" class="el"></div>
<div id="element8" class="el"></div>
<div id="element9" class="el"></div>
vous pouvez essayer ceci:
window.onmouseover=function(e) {
console.log(e.target.className);
};
Voulez-vous le nom de classe du div sur lequel se produit l'événement mouseover? Si tel est le cas, référez-vous à ceci,
[~ # ~] html [~ # ~]
<div class="a">aaaaaaaa</div>
<div class="b">bbbbbbbbb</div>
jQuery
$(document).on('mouseover', 'div', function(e) {
console.log($(e.target).attr('class'));
});
J'ai utilisé l'événement survol avec la cible
e.target donne l'élément sur lequel cet événement se produit
Si vous voulez obtenir le nom de classe de div après avoir quitté la souris, utilisez alors l'événement "mouseleave" instaed de "mouseover"
Ce que la plupart des gens ont négligé, c'est cette demande du PO:
When mouse over div from a
Cela signifie que vous devez savoir que vous avez survolé un type d'élément spécifique, et pas n'importe quel élément.
J'ai fait une var globale, changeant en true sur le mouseleave
d'éléments spécifiques, dans votre cas un élément a
. Ensuite, à l'intérieur de la fonction de survol, vous devez vérifier que c'est vrai.
Voici une démo
Edit: Mise à jour de la démonstration du violon avec les cas Edge lors du survol de l'élément a
et non directement sur le div
.
Obtenez la position de l'élément au survol de la souris, puis obtenez le nom de la classe
<div id="wrapper">
<a href="#" class="anchorClass">A</a><div class="divClass">DIV</div>
</div>
$('#wrapper').mouseover(function(e) {
var x = e.clientX, y = e.clientY,
elementOnMouseOver = document.elementFromPoint(x, y);
elementClass=$(elementOnMouseOver).attr('class');
alert(elementClass);
});
JSFiddle: http://jsfiddle.net/ankur1990/kUyE7/
Si vous ne voulez pas l'appliquer uniquement sur div wrapper mais sur toute la fenêtre/le document, vous pouvez remplacer le wrapper par la fenêtre/le document
$(window).mouseover(function(e){});
cela devrait fonctionner:
définir une classe dans votre feuille de style:
.detectable-div{
border: white solid 1px;
}
.detectable-div:hover{
border: red solid 1px;
}
puis dans votre js:
$('div.detectable-div:hover').mouseover(function () {
$(this) // this is your object
})
Tout dépend de la façon dont vous le souhaitez. Cela pourrait également être une option:
Avec un peu plus de détails. Cela n'apparaîtra comme vrai qu'après avoir pris le chemin direct de a
à div
. (Le tout petit espace blanc entre a
et div
.) Comme dans:
a
-> div
TRUEa
-> div
-> white space in between
-> div
FAUXPourrait tenir. Cela apparaîtra également comme vrai si l'on va dans le petit espace blanc entre a
et div
, puis revenir à div
. Un péché:
a
-> div
-> white space in between
-> div
TRUEvar mode = 0;
$(window).on("mousemove", function(e) {
if (e.target.className === "d1") {
mode = 1;
} else {
var cc = e.target.className;
if (cc !== "d2" && mode) {
var el = $(".d1"),
d1 = {
x : el.offset().left,
y : el.offset().top,
w : el.width(),
h : el.height()
},
c = {
x : e.pageX,
y : e.pageY
};
if (c.x >= d1.x + d1.w && c.y >= d1.y && c.y <= d1.y + d1.h)
mode = 2;
else
mode = 0;
} else if (cc === "d2" && mode) {
mode = 3;
}
}
$("#status").html("Current: " + (mode == 3 ? "OVER" : "NOT OVER") + " from a" );
});