有没有一种简单的方法来定位所有覆盖(即在其边界内部)具有X/Y坐标对的像素的DOM元素?
有没有一种简单的方法来定位所有覆盖(即在其边界内部)具有X/Y坐标对的像素的DOM元素?
document.elementFromPoint
,但我不知道哪些浏览器支持。更新:
要查找某个位置上的所有元素,您可以假设该位置的父元素中的所有元素都在此位置上。当然,这对于绝对定位的元素是无效的。
elementFromPoint
仅会给您最前面的元素。如果想要真正找到其他元素,则需要将最前面元素的display
设置为none
,然后再次运行该函数。但用户可能会注意到这一过程。您需要尝试。
我忍不住要回复Felix Kling的答案:
var $info = $('<div>', {
css: {
position: 'fixed',
top: '0px',
left: '0px',
opacity: 0.77,
width: '200px',
height: '200px',
backgroundColor: '#B4DA55',
border: '2px solid black'
}
}).prependTo(document.body);
$(window).bind('mousemove', function(e) {
var ele = document.elementFromPoint(e.pageX, e.pageY);
ele && $info.html('NodeType: ' + ele.nodeType + '<br>nodeName: ' + ele.nodeName + '<br>Content: ' + ele.textContent.slice(0,20));
});
更新: 背景颜色 !
mousemove
上这样做几乎是 CPU 过载。更不用说 OP 从未说明他想要用它来做什么了。 - gblazexclearTimeout
/ setTimeout
平衡器;) - jAndy$(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
和opacity:0
元素。