记录超链接点击我的网站

时间:2011-01-11 14:05:15

标签: javascript jquery html logging hyperlink

我有一个网站,我允许其他开发者托管内容。 我的目标是记录页面上存在的每个超链接(甚至是其他开发人员托管的内容)的点击。

我的初步方法如下:

$('a').click(function(event)
             {
                //do my logging
                return true;
             }
);

现在采用上述方法,我面临以下问题:

  • 开发人员可能在锚链接中有图像,因此事件目标是图像而不是href
  • 许多开发人员都有自己的方法来处理href点击,使用onclick事件而不是简单的href =''attr
  • 一些开发人员将自定义attr添加到代码中,并具有自定义函数来处理点击次数
基本上,问题是,可用的锚标签种类繁多,记录点击次数并不那么简单 许多情况允许我记录我想要的数据,但是在一些情况下,严重破坏了代码。

我在这个论坛上发帖的目的是:

  • 讨论在动态环境中进行超链接点击记录的正确方法
  • 是否有插件,允许这样的功能。

我知道facebook和google有这个,但他们有一个totol控件,在他们的环境中托管什么。

非常感谢任何帮助。

2 个答案:

答案 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。

在某些情况下,您将无法进行日志记录,但如果它们与您可以做到的情况相比较小,那么您将会很好:)。