如何使用jQuery not selector选择相对URL?

时间:2010-05-07 09:55:55

标签: jquery google-analytics selector analytics

我正在制作一个小jQuery脚本,将Google Analytics pageTracker onclick数据添加到论坛上的所有相关网址,以便我跟踪外部网站的点击次数。

我不想将onclick添加到forum.sitename或sitename上的内部链接,我不想将它们添加到标记为#或以/开头的任何href。我的脚本下面很好用,但是一个小问题!

所有论坛的网址都是相对的,不以/开头。我似乎无法改变它,因此需要修改下面的jQuery以防止它像现在一样将onclick添加到链接。

我想要做的是编写.not()函数,例如.not(“[href!^ = http”),以防止jQuery将onclick添加到任何不以http开头的href。但是,.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 + ");")
 ;

});

谢谢!

2 个答案:

答案 0 :(得分: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);
  });
});

答案 1 :(得分: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);
})