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
类