Javascript 如何找到位于给定(X,Y)位置的DOM节点?(命中测试)

Javascript 如何找到位于给定(X,Y)位置的DOM节点?(命中测试),javascript,qt,dom,hittest,Javascript,Qt,Dom,Hittest,我有一个HTML文档中一个点的坐标(X,Y)。如何确定这些坐标处的DOM节点 一些想法: 是否有我错过的DOM命中测试函数,它取一个点(X,Y)并在那里返回DOM元素 是否有一种有效的方法遍历DOM元素树以找到包含的元素?这看起来很棘手,因为元素是绝对定位的 是否有一种方法可以在给定的(X,Y)位置模拟事件,从而使浏览器最终创建一个具有指向元素指针的事件对象 (背景:我正在一个本地应用程序中嵌入Qt的QWebView。我试图根据鼠标所在的DOM节点改变Qt小部件提供的上下文菜单,但Qt 4.

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

一些想法:

  • 是否有我错过的DOM命中测试函数,它取一个点(X,Y)并在那里返回DOM元素
  • 是否有一种有效的方法遍历DOM元素树以找到包含的元素?这看起来很棘手,因为元素是绝对定位的
  • 是否有一种方法可以在给定的(X,Y)位置模拟事件,从而使浏览器最终创建一个具有指向元素指针的事件对象
(背景:我正在一个本地应用程序中嵌入Qt的QWebView。我试图根据鼠标所在的DOM节点改变Qt小部件提供的上下文菜单,但Qt 4.5无法对DOM元素进行命中测试,尽管该功能是在4.6中实现的。因此我希望我可以将坐标转换为Javascript,并进行命中测试。)这里有domapi。)


谢谢!

只要您的用户不使用旧版本的Safari、Chrome或Opera,您就很幸运:使用
文档。元素frompoint(x,y)
(,):

返回文档中的元素 …哪一个是最重要的元素 在给定的点下

如果您需要支持较旧的浏览器,我想不出除了您所建议的以外的其他许多选项(遍历整个DOM,查看元素的位置和大小,并查看它们是否封装了您的(x,y))


我不认为事件模拟会起作用,但这是一个有趣的想法。我对事件调度的理解是,您可以指定事件的目标,这正是您首先要找到的。

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

这可能不是最好的解决方案,但您可以遍历dom树,首先查找包含x和y位置的祖先节点的坐标,然后快速到达包含坐标的叶节点。用于获取交叉中节点的位置您可以通过浏览器查看JS工具包。我使用的是dojo。看看dojo。_getMarginBox


为Firefox 3和IE编写了文档,但有关跨浏览器差异,请参见。

您可以使用jQuery。我将所有需要的dom元素绑定到click事件,这将在单击时为我提供适当的dom对象。

componentFromPoint不会返回节点。完美!elementFromPoint在WebKit中工作,这就是我嵌入的内容…完美的胜利!
document.elementFromPoint(x,y)