2 Stimmen

Wie verwende ich einen jQuery-Not-Selektor, um relative URLs auszuwählen?

Ich arbeite an einem kleinen jQuery-Skript, um Google Analytics pageTracker onclick-Daten zu allen relativen URLs in meinem Forum hinzuzufügen, um Klicks auf externe Websites zu verfolgen.

Ich möchte das onclick nicht zu internen Links auf forum.sitename oder sitename hinzufügen und auch nicht zu hrefs, die mit # markiert sind oder mit / beginnen. Mein Skript unten funktioniert gut, aber mit einem kleinen Problem!

Alle URLs im Forum sind relativ und beginnen nicht mit /. Es scheint keinen Weg zu geben, das zu ändern, daher muss ich das jQuery unten ändern, um zu verhindern, dass es das onclick zu Links wie hinzufügt, wie es derzeit tut.

Was ich tun möchte, ist eine .not()-Funktion wie .not("[href!^=http") zu schreiben, um zu verhindern, dass jQuery das onclick zu hrefs hinzufügt, die nicht mit http beginnen. Allerdings scheint .not() dies nicht zu unterstützen.

Ich bin neu in jQuery und kann das nicht herausfinden. Über jede Hilfe wäre ich sehr dankbar.

$(document).ready(function(){
     // URL aus einem href holen
     var URL = $("a").attr('href');

 // pageTracker-Daten für die GA-Verfolgung hinzufügen
 $("a")
 .not("[href^=#]")
 .not("[href^=http://forum.sitename]")
 .not("[href^=http://www.sitename]")
 .attr("onclick","pageTracker._trackEvent('Outgoing_Links', 'Forum', " + URL + ");")
 ;

});

Danke!

4voto

Nick Craver Punkte 609016

Sie können den Nicht-Selektor so schreiben, um die Links zu erhalten, die nicht mit http beginnen, aber nicht "sitename.com" enthalten:

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

Sie können hier mit einem Beispiel spielen, dies verwendet den zeichenkettenbasierten :not() Selektor und den ^= Attribut Starts-With-Selektor, den Sie bereits verwenden, und den *= Attribut-Enthält-Selektor.

Update basierend auf Kommentaren:

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

2voto

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

$('a').filter(function(){
    // Filtern von internen Links
    return regex.test(this.href);
}).click(function(){
    pageTracker._trackEvent('Ausgehende Links', 'Forum', this.href);
})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X