2010-05-07 51 views
2

我正在处理一个小小的jQuery脚本,将Google Analytics pageTracker onclick数据添加到我论坛上的所有相关网址,使我可以跟踪点击到外部网站。如何使用jQuery而不是选择器来选择相对URL?

我不想将onclick添加到forum.sitename或sitename上的内部链接,我不想将它们添加到标记为#或以/开头的任何hrefs。我的脚本很好地工作,但对于一个小问题!

论坛的所有网址都是相对的,不以/开头。我似乎无法改变这种情况,所以需要修改下面的jQuery,以防止像当前那样将onclick添加到链接。

我想要做的是写一个.not()函数,如.not(“[href!^ = http”),以防止jQuery将onclick添加到任何不以http开头的hrefs。但是,.not()似乎不支持这一点。

我是jQuery的新手,无法弄清楚这一点。任何指针都会被大量赞赏。

$(document).ready(function(){ 
    // Get URL from a href 
    var URL = $("a").attr('href'); 

// Add pageTracker data for GA tracking 
$("a") 
.not("[href^=#]") 
.not("[href^=http://forum.sitename]") 
.not("[href^=http://www.sitename]") 
.attr("onclick","pageTracker._trackEvent('Outgoing_Links', 'Forum', " + URL + ");") 
; 

}); 

谢谢!

回答

4

你可以写的不是选择器这样来获取开始与http的联系,但包含“sitename.com”:

$('a[href^=http]:not([href*="sitename.com"])') 

You can play with an example here,这个使用字符串基于:not() selector^= attribute starts-with selector您已经使用和*= attribute contains eelector

更新基于评论:

$(functon() { 
    $('a[href^=http]:not([href*="sitename.com"])').click(function() { 
    pageTracker._trackEvent('Outgoing_Links', 'Forum', this.href); 
    }); 
}); 
+0

谢谢,尼克。这不适合我。也许这是因为我全是双重否定的!将.not(“[href^= http]”)添加到我的脚本中会导致onclick被添加到相对URL,但不是绝对URL。 有什么想法吗? – Matt 2010-05-07 10:29:49

+0

@Matt - 更新了这个答案,我不得不重新阅读这个问题:)这应该让你想要你想要的,更新了这个例子。 – 2010-05-07 10:33:25

+0

杰出。谢谢,尼克!你让我很快乐。 – Matt 2010-05-07 10:36:47

2
var regex = RegExp('^(?:f|ht)tps?://(?!' + location.hostname + ')'); 

$('a').filter(function(){ 
    // Filter-out internal links 
    return regex.test(this.href); 
}).click(function(){ 
    pageTracker._trackEvent('Outgoing_Links', 'Forum', this.href); 
})