私が以前に採用した手法は、ドキュメント全体に非表示の絶対位置の要素を配置することです。これは実際にFirebugLiteで採用されており、ElementInspectorがクリックをインターセプトできるようになっています。
心配する必要があるのは、イベントリスナーを絶対位置の要素にアタッチし、クリックしたときにマウスの下にあった要素を把握することだけです。幸いなことに、最近のすべてのブラウザーは、これを識別するためのメソッド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
});