Javascript 如何在鼠标功能下获取顶级对象?

Javascript 如何在鼠标功能下获取顶级对象?,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,标题说明了一切。我有一个子div,在相对的父div中有绝对位置,我想知道鼠标在“随机”时间点是在子div上还是在父上 假设,我想调用.mouseover方法,对最高级别的对象执行.hasclass测试,看看它是否有子类。但是,.mouseover是一个事件处理程序,因此我不能通过调用它来获取相关信息 下面的HTML示例: $(文档).ready(函数(){ $(“.child”).draggable(); 设置超时(剂量测量,31415); }); var doSomething=函数(){

标题说明了一切。我有一个子
div
,在相对的父
div
中有绝对位置,我想知道鼠标在“随机”时间点是在子
div
上还是在父

假设,我想调用
.mouseover
方法,对最高级别的对象执行
.hasclass
测试,看看它是否有
子类。但是,
.mouseover
是一个事件处理程序,因此我不能通过调用它来获取相关信息

下面的HTML示例:

$(文档).ready(函数(){
$(“.child”).draggable();
设置超时(剂量测量,31415);
});
var doSomething=函数(){
//根据鼠标下方的内容编辑内容
}
.parent{
宽度:100%;
高度:1000px;
位置:相对位置;
背景:#f0;
}
.孩子{
宽度:300px;
高度:100px;
位置:绝对位置;
背景:#中交;;
}

如果我理解正确,您想知道在任何给定时间,鼠标是在孩子身上还是直接在家长身上。您可以通过使用
:hover
伪类来实现它

创建一个函数,用于检查是否有任何
.child
具有
:hover
类:

  • 如果有,这意味着鼠标位于
    .child
    (您拥有该元素)上,无需检查父元素
  • 如果没有,则检查是否有任何
    .parent
    元素也包含您创建的类:

    • 如果有:鼠标在
      .parent
      上,但不在
      .child
    • 如果没有:鼠标i没有在
      .parent
      .child
实现这一点的代码很简单:

function checkMouseOver() {
  if ($(".child:hover").length) {
    // mouse over a .child
  } else if ($(".parent:hover").length) {
    // mouse over a .parent (but not over .child)
  } else {
    // mouse not over a .parent or .child;
  }
}

一个简单的工作演示:

$(“.child”).draggable();
//根据鼠标下方的内容编辑内容
函数checkMouseOver(){
if($(“.child:hover”).length){
警报(“您在“+$(“.child:hover”).text()上方”;
}else if($(“.parent:hover”).length){
警报(“您在”+$(“.parent:hover”).attr(“id”);
}否则{
警报(“您未超过.parent或.child”);
}
}
.parent{
宽度:100%;
高度:1000px;
位置:相对位置;
背景:#f0;
}
.孩子{
宽度:300px;
高度:100px;
位置:绝对位置;
背景:#中交;;
}

检查鼠标在哪里
儿童1
儿童2
儿童3
儿童4

从位置获取元素是设计的目的:

document.elementFromPoint(mousePosition.x, mousePosition.y);

要获取当前鼠标位置,请将侦听器连接到
mousemove
(据我所知,在没有鼠标事件的情况下,没有提取鼠标坐标的本机方法)。这里有一个例子显示了这一点:

很难从假设中提取细节,因此这可能偏离目标,但是否可以将事件侦听器放在所有子元素而不是父元素上?这样就不需要测试了。如果没有,也许你可以详细说明为什么你不能这样做?你想知道在任何时候你是在
.child
div上,还是在
.parent
div上(但不要超过一个
.child
,对吗?@Alvarontoro是的,对了。@Strixy我应该在问题中详细说明,对此表示歉意。我不能使用事件侦听器,因为在使用时我已经在事件处理程序中。不过,我会在下班后更新问题,让其他人更清楚地了解这一点r阿尔瓦罗·蒙托罗已经回答了这个问题!有一种方法可以不移动鼠标就获得鼠标坐标,我前几天刚在这里看到过,但现在找不到了。@blgt+1谢谢你的精彩回答!我必须给阿尔瓦罗·蒙托罗正确的答案,尽管他首先用同样正确的答案回答了。@dandavis今年五月是吗?是的!mouseenter,就是这样!你应该能够将这些事件对象道具提供给你的elementFromPoint()对于傻瓜式的覆盖。一个非常好的专业解决方案,适用于比OPs可能需要的情况多得多的情况。相关吗?这很有趣,因为这个想法类似。如果OP想知道最深层的元素(独立于类),这将非常有用,因为我的解决方案只关注
.child