可能重复:
通过绝对坐标定位 DOM 元素
我想找出位于单击鼠标位置的所有 DOM 元素的列表。我需要使用 javascript 或 jquery 来执行此操作。有人可以建议我如何做到这一点吗?
可能重复:
通过绝对坐标定位 DOM 元素
我想找出位于单击鼠标位置的所有 DOM 元素的列表。我需要使用 javascript 或 jquery 来执行此操作。有人可以建议我如何做到这一点吗?
我会使用 jQuery 来执行此操作,从单击的元素开始并获取所有单击的元素的列表。在鼠标单击时向文档添加处理程序:
$( document ).click( function( event ) {
// event.currentTarget is the clicked element
// this is a list of all the parents of the clicked element
$( event.currentTarget ).parents();
}
这可以完成工作(小提琴):
$(document).click(function(e) {
var hitElements = getHitElements(e);
});
var getHitElements = function(e) {
var x = e.pageX;
var y = e.pageY;
var hitElements = [];
$(':visible').each(function() {
var offset = $(this).offset();
if (offset.left < x && (offset.left + $(this).outerWidth() > x) && (offset.top < y && (offset.top + $(this).outerHeight() > y))) {
hitElements.push($(this));
}
});
return hitElements;
}
使用时:visible
,您应该注意这一点:
具有 visibility: hidden 或 opacity: 0 的元素被认为是可见的,因为它们仍然占用布局中的空间。在隐藏元素的动画期间,该元素被认为是可见的,直到动画结束。在显示元素的动画期间,该元素被认为在动画开始时可见。
因此,根据您的需要,您可能希望排除visibility:hidden
andopacity:0
元素。
您无法使用 javascript 通过坐标位置模拟鼠标点击(想想这将是一个多么安全的问题!),所以我认为您无法完成您想要做的事情。另外,没有编程方式可以查看页面上任意 x/y 位置可能存在哪些图层。如果您只是尝试调试某些内容并希望查看页面上某个 x,y 位置的所有内容,只需在查看完 Firebug 或 Chrome 检查器中的每个元素并使用检查器查看下面的内容即可它。
如果你真的需要一个工具来做你想做的事,你可以结合使用 jquery 和浏览器插件。您可以编写一个 Chrome 或 Firefox 扩展程序,使用 event.x 和 event.y 坐标模拟真实的鼠标点击。然后,您可以使用前面提到的捕获单击元素的所有父项的建议。对这些元素进行编目后,找到单击项目的最顶层父级,克隆它,删除除最顶层父级本身之外的所有克隆元素,并将该最顶层父级的背景设置为透明。现在用这个透明的克隆元素替换 DOM 中的原始元素。这样,您保留了页面的布局,当您模拟另一次点击时,您实际上是在点击“通过” 最顶部的元素(透明的)并单击它后面的下一个 DOM 元素(如果有的话)。重复上述过程,直到到达 body 标签。最后,您将在特定 x,y 位置获得所有 DOM 元素的完整列表。
检查这个 - http://jsfiddle.net/blackpla9ue/U2RCE/5/
点击“世界”这个词来查看它的实际效果。
这也适用于absolute
定位元素。
$('*').click(function(event){
console.log($(this)[0].tagName + ' ' + $(this)[0].className);
});