Javascript 在我的网站上记录超链接点击

Javascript 在我的网站上记录超链接点击,javascript,jquery,html,logging,hyperlink,Javascript,Jquery,Html,Logging,Hyperlink,我有一个网站,在那里我允许其他开发者托管内容。 我的目标是记录页面上存在的每个超链接(甚至是其他开发人员托管的内容)上的点击 我最初的做法如下: $('a').click(function(event) { //do my logging return true; } ); 现在,通过上述方法,我面临以下问题: 开发人员可能在锚链接中有图像,因此事件目标是图像而不是href 许

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

我最初的做法如下:

$('a').click(function(event)
             {
                //do my logging
                return true;
             }
);
现在,通过上述方法,我面临以下问题:
  • 开发人员可能在锚链接中有图像,因此事件目标是图像而不是href
  • 许多开发人员都有自己处理href单击的方法,使用onclick事件而不是简单的href=''attr
  • 一些开发人员将其自定义属性添加到标记中,并使用自定义函数来处理单击
因此,基本上,问题是,有各种各样的锚定标签可用,记录点击并不是那么简单。
很多情况下,我可以记录我想要的数据,但也有少数情况下,代码被严重破坏

我在这个论坛上发表文章的目的是:
  • 讨论在动态环境中进行超级链接单击日志记录的正确方法
  • 有没有一个插件,它允许这样的功能
我知道facebook和google都有这样的功能,但他们有一个totol控制,控制他们的环境中所承载的内容


非常感谢您的帮助。

在您的日志代码中,您应该检查坏情况并相应地处理

例如,在您的第一个案例中,我将获取图像并遍历dom,直到我找到一个
a
标记并从那里记录href

在某些情况下,您将无法执行日志记录,但如果与您可以执行的情况相比,这些情况很小,那么您将很好:)

在每个链接中添加单击处理程序不是一个好主意。您应该使用事件委派(它将只在文档根目录下附加一个事件处理程序):

更新(17.12.2011):

从jQuery 1.7开始,可以使用:


关于您的问题:

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

只要不取消传播,事件就会冒泡。这取决于您要记录的内容。使用
delegate
时,
事件.target
属性将指向图像,但
(处理程序内部)将指向
a
元素。
因此,这里应该没有问题(示例:)

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

(旁注:您可以通过让事件处理程序在中激发来解决这个问题,但IE不支持这一点(因此jQuery也不支持)

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

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

一些开发人员将其自定义属性添加到标记中,并使用自定义函数来处理单击

不知道你在这里是什么意思



这还取决于其他内容是如何包含的。例如,上面的代码不会跟踪iframes中的点击。

Isint事件委托与$(元素)相同。绑定?@Neeraj:这取决于。如果侦听器侦听从子体冒出的事件,则始终是事件委派。但是
$(元素).bind('click',…)
$(元素).click(…)
相同,即将click事件处理程序绑定到
元素所选的元素
delegate
可以更轻松地收听某些子体的事件。@Neeraj:假设您有1000个链接<代码>$('a')。单击(…)
(或
$('a')。绑定('click',…)
)将创建1000个事件处理程序。但是,
$(文档)。委托('a','click',…)
只是创建了一个。另外,如果我想筛选并向所有链接添加侦听器,而不是在单击后添加链接和日志记录,该怎么办?@Neeraj:我不明白你的意思。你想过滤什么?我以为你的最终目标是登录链接,你现在想做什么?
$(document).delegate('a', 'click', function(event) {
    // logging
});
$(document).on('click', 'a', function(event) {
    // logging
});