如何使用 jQuery 在鼠标悬停时找到当前元素?

Posted

技术标签:

【中文标题】如何使用 jQuery 在鼠标悬停时找到当前元素?【英文标题】:How can I find current element on mouseover using jQuery? 【发布时间】:2014-03-21 15:46:00 【问题描述】:

如何获取鼠标悬停的当前元素的类名?例如

当鼠标从 div 移到 a 时,我想获取 div 元素的类名。如何使用 jQuery 获取它?

【问题讨论】:

你能创建一个小提琴来详细说明你的问题吗? 发布您的 html 以及您目前拥有的内容 一种方法,也许不是最好的方法是创建一个在悬停时分配的样式,然后找到具有该样式的元素 jsfiddle.net/roXon/dJgf4 @Robert Rozas 谢谢 【参考方案1】:

这是我的版本:

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

工作小提琴:http://jsfiddle.net/roXon/dJgf4/

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>

【讨论】:

【参考方案2】:

你想要鼠标悬停事件发生的 div 的类名吗? 如果是这种情况,请参考这个,

HTML

<div class="a">aaaaaaaa</div>
<div class="b">bbbbbbbbb</div>

jQuery

$(document).on('mouseover', 'div', function(e) 
    console.log($(e.target).attr('class'));
);

jsFiddle

我已经在目标上使用了鼠标悬停事件

e.target 给出发生该事件的元素

如果你想在鼠标离开后获取 div 的类名 然后使用“mouseleave”事件代替“mouseover”

【讨论】:

【参考方案3】:

一切都取决于您想要的方式。这也可能是一种选择:

»Fiddle 1«

更多细节。这仅在采用从adiv 的直接路径后才会显示为真。 (adiv 之间的微小空白。)如:

a -> div 是的 a -> div -> white space in between -> div FALSE

»Fiddle 2«

可能会坚持下去。如果前往adiv 之间的微小空白区域,然后返回div,这也将显示为true。如:

a -> div -> white space in between -> div TRUE
var 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" );
);

【讨论】:

【参考方案4】:

你可以试试这个:

window.onmouseover=function(e) 
        console.log(e.target.className);
;

【讨论】:

【参考方案5】:

获取鼠标悬停时元素的位置,然后获取类名

<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/

如果您不想仅将其应用于包装 div 而是应用于整个窗口/文档,那么您可以将包装替换为窗口/文档

 $(window).mouseover(function(e));

【讨论】:

这将为您提供wrapper 中的任何元素,而不仅仅是相关的 div。【参考方案6】:

这应该可行:

在样式表中定义一个类:

.detectable-div
    border: white solid 1px;


.detectable-div:hover
    border: red solid 1px;

然后在你的 js 中:

$('div.detectable-div:hover').mouseover(function () 
    $(this) // this is your object
)

【讨论】:

【参考方案7】:

大多数人忽略的是 OP 的这个要求:

When mouse over div from a

意味着您需要知道您已经从特定类型的元素中悬停,不仅仅是从任何元素。

我创建了一个全局变量,在特定元素的 mouseleave 上更改为 true,在您的情况下为 a 元素。然后,在悬停功能中,您需要检查它是否为真。

这是Demo

编辑:当从a 元素悬停不直接到div 时,更新了带有边缘情况的小提琴演示。

【讨论】:

【参考方案8】:

来自 jQuery API

 <div class="className">
      <span class="span">move your mouse</span>
    </div>



<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(".className").mouseover(function() 
        var n = $(this).attr("class");
        $(".span").html("");
        $(".span").html("The class :"+n);
      );
   </script>

【讨论】:

以上是关于如何使用 jQuery 在鼠标悬停时找到当前元素?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery SVG - 悬停元素

如何在鼠标悬停时突出显示图像地图的某些部分?

jQuery - 当鼠标悬停在元素上时,如何继续动画?

从文档中的任何位置访问当前被鼠标悬停的元素[关闭]

拖动元素jquery ui时连续触发鼠标悬停事件?

jQuery Time 鼠标悬停在元素上(悬停)