我有一个网站,我允许其他开发者托管内容。 我的目标是记录页面上存在的每个超链接(甚至是其他开发人员托管的内容)的点击。
我的初步方法如下:
$('a').click(function(event)
{
//do my logging
return true;
}
);
我知道facebook和google有这个,但他们有一个totol控件,在他们的环境中托管什么。
非常感谢任何帮助。
答案 0 :(得分:8)
向每个链接添加点击处理程序不是一个好主意。您应该使用事件委派(只会在文档的根目录附加一个事件处理程序):
$(document).delegate('a', 'click', function(event) {
// logging
});
更新(2011年12月17日):
从jQuery 1.7开始,人们会使用.on()
[docs]:
$(document).on('click', 'a', function(event) {
// logging
});
关于您的问题:
开发人员可能在锚链接中有图像,因此事件目标是图像而不是href
只要传播未被取消,事件就会冒泡。这取决于您要记录的内容。使用delegate
event.target
属性将指向图像,但this
(处理程序内)将指向a
元素。
所以你应该没有问题(例如:http://jsfiddle.net/cR4DE/)。
但这也意味着如果开发人员取消传播,您将错过点击次数。
(旁注:你可以解决这个问题,让事件处理程序在capturing phase中触发,但是IE不支持这个(因此jQuery也不支持)。)
许多开发人员都有自己的方法来处理href点击,使用onclick事件而不是简单的href =''attr
这不会触及现有的事件处理程序。
一些开发人员将自定义attr添加到标记中,并具有自定义函数来处理点击
不确定你的意思。
这还取决于其他内容的包含方式。例如。上述代码不会跟踪iframe中的点击次数。
答案 1 :(得分:1)
在您的日志记录代码中,您应检查不良案例并进行相应处理。
例如,在你的第一种情况下,你得到了图像并走了dom直到我找到a
标签并从那里记录href。
在某些情况下,您将无法进行日志记录,但如果它们与您可以做到的情况相比较小,那么您将会很好:)。