记录超链接点击我的网站

Nee*_*raj 4 html javascript jquery logging hyperlink

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

我的初步方法如下:

$('a').click(function(event)
             {
                //do my logging
                return true;
             }
);
Run Code Online (Sandbox Code Playgroud)

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

  • 开发人员可能在锚链接中有图像,因此事件目标是图像而不是href
  • 许多开发人员都有自己的方法来处理href点击,使用onclick事件而不是简单的href =''attr
  • 一些开发人员将自定义attr添加到标记,并具有自定义函数来处理点击

基本上,问题是,可用的锚标签种类繁多,而且记录点击次数并不那么简单.
许多情况允许我记录我想要的数据,但是在一些情况下,严重破坏了代码.

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

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

我知道facebook和谷歌有这个,但他们有一个totol控制,在他们的环境托管什么.

任何帮助是极大的赞赏.

Fel*_*ing 8

每个链接添加一个点击处理程序并不是一个好主意.您应该使用事件委托(它只会在文档的根目录附加一个事件处理程序):

$(document).delegate('a', 'click', function(event) {
    // logging
});
Run Code Online (Sandbox Code Playgroud)

更新(17.12.2011):

从jQuery 1.7开始,人们会使用.on() [docs]:

$(document).on('click', 'a', function(event) {
    // logging
});
Run Code Online (Sandbox Code Playgroud)

关于你的问题:

开发人员可能在锚链接中有图像,因此事件目标是图像而不是href

只要传播未被取消,事件就会冒泡.这取决于您要记录的内容.与delegateevent.target属性将指向图像,但this(该处理程序内部)将指向a元件.
所以你应该没有问题(例如:http://jsfiddle.net/cR4DE/).

但这也意味着如果开发人员取消传播,您将错过点击次数.

(旁注:你可以解决这个问题,让事件处理程序在捕获阶段激活,但是IE不支持这个(因此jQuery也不支持).)

许多开发人员都有自己的方法来处理href点击,使用onclick事件而不是简单的href =''attr

这不会触及现有的事件处理程序.

一些开发人员将自定义attr添加到标记,并具有自定义函数来处理点击

不确定你的意思.


它还取决于其他内容的包含方式.例如,上述代码不会跟踪iframe中的点击次数.