如何使用 jQuery 非选择器来选择相对 URL?

发布于 2024-08-31 11:04:19 字数 827 浏览 3 评论 0原文

我正在编写一个小 jQuery 脚本,将 Google Analytics pageTracker onclick 数据添加到论坛上的所有相关 URL,从而允许我跟踪对外部站点的点击。

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

论坛的所有 URL 都是相对的,并且不以 / 开头。我似乎无法改变这一点,因此需要修改下面的 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 + ");")
 ;

});

谢谢!

I'm working on a little jQuery script to add Google Analytics pageTracker onclick data to all relative URLs on my forum, allowing me to track clicks to external sites.

I don't want to add the onclick to internal links on forum.sitename or sitename, and I don't want to add them to any hrefs marked # or that start with /. My script below works nicely, but for one minor problem!

All of the forum's URLs are relative and don't start with /. I appear to have no way to change that, so need to modify the jQuery below to prevent it adding the onclick to links like as it currently does.

What I want to do, is to write a .not() function like .not("[href!^=http") to prevent jQuery from adding the onclick to any hrefs which do not start with http. However, .not() appears not to support this.

I'm new to jQuery and can't figure this out. Any pointers would be massively appreciated.

$(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 + ");")
 ;

});

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无需解释 2024-09-07 11:04:19

您可以像这样编写 not 选择器来获取确实http 开头但包含“sitename.com”的链接:

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

您可以在此处使用示例,这使用基于字符串的 :not() 选择器^= 属性starts-with 选择器 您已在使用和 *= 属性包含 eelector

根据评论更新:

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

You can write the not selector like this to get the links that do start with http, but don't contain "sitename.com":

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

You can play with an example here, this uses the string based :not() selector and the ^= attribute starts-with selector you're already using and the *= attribute contains eelector.

Update based on comments:

$(functon() {
  $('a[href^=http]:not([href*="sitename.com"])').click(function() {
    pageTracker._trackEvent('Outgoing_Links', 'Forum', this.href);
  });
});
爱你不解释 2024-09-07 11:04:19
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);
})
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);
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文