-->

如何找到这是在给定的(X,Y)的位置DOM节点? (打试验)(How do I find the

2019-08-18 04:40发布

我有一个HTML文档中的点的坐标(X,Y)。 如何确定DOM节点是在这些坐标是什么?

一些想法:

  • 是否有一个DOM打,我错过了测试功能,这需要一个点(X,Y),并返回DOM元素呢?
  • 有走的DOM元素树找到包含元素的有效途径? 这似乎是它会因为绝对定位元素的棘手。
  • 有一种方法,以模拟在给定的(X,Y)的位置,使得浏览器最终创建具有一个指向元素的事件对象的事件?

(背景:我嵌入Qt的QWebView在本机应用程序我想改变的是Qt物件提供基于鼠标是在DOM节点的上下文菜单,但Qt的4.5不能打测试DOM元素,虽然该功能在4.6到来。所以,我希望我能折腾的坐标转换为JavaScript和DOM用的API做的命中测试那里。)

谢谢!

Answer 1:

只要你的用户不使用Safari浏览器,Chrome或歌剧的旧版本,你很幸运:使用document.elementFromPoint(x, y) MSDN参考 , Mozilla的裁判 , 怪异模式的文章 ):

返回从文件......这是位于指定点下最上面的元素的元素。

如果您需要支持旧的浏览器,我想不出比你有什么建议其他许多选项(遍历整个DOM,看着元素的位置和大小,看其中是否封装你(X,Y))。

我不认为事件仿真工作,但它是一个有趣的想法。 我的事件调度的理解是你指定目标的事件是,这是你正在试图找出在首位正是。



Answer 2:

在IE中存在document.body.componentFromPoint(x,y) 我不知道是否有一个跨浏览器的实现。



Answer 3:

这可能不是最好的解决办法,但你可以遍历DOM树开始寻找祖先节点的坐标包含您的x和y位置,并迅速得到包含您的坐标的叶节点。 为了得到一个跨浏览器的方式,节点的位置,你可以看看JS工具包。 我所使用的一个是道场。 看看dojo._getMarginBox 这里



Answer 4:

document.elementFromPoint(x,y)

记录在这里对Firefox 3和这里的IE浏览器,但看到怪异模式跨浏览器的差异。



Answer 5:

您可以使用jQuery了点。 我会结合所有需要的DOM元素点击事件,这会让我上点击相应的DOM对象以及鼠标位置 。



文章来源: How do I find the DOM node that is at a given (X,Y) position? (Hit test)