我以前采用的一种技术是在整个文档上放置一个不可见的绝对定位元素。这实际上是由 Firebug Lite 使用的,以允许 Element Inspector 拦截任何点击。
然后,您需要担心的就是将事件侦听器附加到绝对定位的元素,并确定单击时鼠标下方的元素。幸运的是,所有现代浏览器都实现了一种识别方法:document.elementFromPoint。实现之间存在一些差异;这是我通常使用的方法(不幸的是,特征检测对此有点棘手,所以我正在做浏览器检测):
var scrollIsRelative = !($.browser.opera || $.browser.safari && $.browser.version < "532");
$.fromPoint = function(x, y) {
if(!document.elementFromPoint) return null;
if(scrollIsRelative)
{
x -= $(document).scrollLeft();
y -= $(document).scrollTop();
}
return document.elementFromPoint(x, y);
};
将单击事件侦听器附加到绝对定位的 div 并在单击时隐藏您的 div 并调用此方法以获取元素,然后再次显示您的 div。例子:
$('#hugeDiv').on('click', function(ev) {
var x = ev.pageX;
var y = ev.pageY;
$(this).hide();
var el = $.fromPoint(x, y);
$(this).show();
//do stuff with el
});