Как использовать селектор jQuery без выбора относительных URL? - PullRequest
2 голосов
/ 07 мая 2010

Я работаю над небольшим скриптом jQuery, чтобы добавить данные о клике Google Analytics pageTracker ко всем относительным URL-адресам на моем форуме, что позволит мне отслеживать клики на внешних сайтах.

Я не хочу добавлять onclick к внутренним ссылкам на forum.sitename или sitename, и я не хочу добавлять их в любые hrefs, отмеченные # или начинающиеся с /.Мой скрипт ниже работает хорошо, но для одной незначительной проблемы!

Все URL форума являются относительными и не начинаются с /.У меня, похоже, нет способа изменить это, поэтому нужно изменить приведенный ниже jQuery, чтобы он не добавлял щелчок мышью по ссылкам, как это происходит в настоящее время.

Я хочу написать функцию .not (), например .not ("[href! ^ = Http"), чтобы jQuery не мог добавлять onclick для любых ссылок, которые не начинаются с http.,Однако .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 ]

4 голосов
/ 07 мая 2010

Вы можете написать не селектор, как это, чтобы получить ссылки, которые do начинаются с http, но не содержат "sitename.com":

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

Вы можете поиграть с примером здесь , здесь используется строковый :not() селектор , а атрибут ^= начинается с селектора you ' Вы уже используете, и атрибут *= содержит eelector .

Обновление на основе комментариев:

$(functon() {
  $('a[href^=http]:not([href*="sitename.com"])').click(function() {
    pageTracker._trackEvent('Outgoing_Links', 'Forum', this.href);
  });
});
2 голосов
/ 07 мая 2010
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);
})
...