2010-05-07 26 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); 
}) 
相關問題