2011-01-07 16 views
13

Ich habe den folgenden Code, um Seitenaufrufe für externe Links zu verfolgen, die einer bestimmten URL entsprechen.Wie wähle ich alle Anker mit einem bestimmten href aus?

$("a").each(function(i){ 
     if (
      $(this).attr('href') == "http://example.com/external/link/" || 
      $(this).attr('href') == "http://example.com/external/link" 
     ) { 
      $(this).click(function(){ 
       _gaq.push(['_trackPageview', '/external/pagename']); 
      }); 
     } 
    }); 

Dieser Code funktioniert, aber es ist extrem ineffizient für Seiten mit vielen Links. Gibt es eine Möglichkeit, einen Selektor zu verwenden, um alle Anker mit übereinstimmenden hrefs auszuwählen, anstatt alle Links auf der Seite zu durchsuchen?

Antwort

46

können Sie die Verwendung Attribute Starts With Selector

$('a[href^="http://example.com/external/link"]').click(function() { 
     _gaq.push(['_trackPageview', '/external/pagename']); 
}); 
+0

So geht's! Sie können dies in Verbindung mit meinem [Google Analytics plugin] (http://writeless.se/2011/01/a-no-fuzz-asynchronous-google-analytics-plugin/) – mekwall

10

Ja

$('a[href^="http://example.com/external/link"]').click(function() {}); 

Mit dem Attributselektor Sie für einen bestimmten href aussehen kann. Anstatt der normalen href=, die Sie erwarten können, habe ich href^= verwendet, die mit jedem Element übereinstimmt, das mit die angegebene Zeichenfolge beginnt.

Sie müssen auch nicht each verwenden, um an das click-Ereignis aller Anker-Tags zu binden, die Sie auswählen. click() wird dies automatisch für Sie tun.

$("a[href^="http://example.com/external/link"]").click(function(){ 
    _gaq.push(['_trackPageview', '/external/pagename']); 
}); 
2

In jQuery alle hrefs bekommen würde wie:

var href = 'http://www.google.com'; 
var elements = $('a[href=' + href + ']'); 

alert("Found: " + elements.length); 
1
$('a[href^="http://example.com/external/link"]').click(function(e){ 
    // you do want to track which link was clicked, yes? 
    _gaq.push(['_trackPageview', $(this).attr('href') ]); 
    // suppress default click or you'll leave the page immediately: 
    e.preventDefault(); 
    do_other_stuff_presumably_with_gaq(); 
}); 
+0

Das attr ('href') von Der Link ist bekannt, ich möchte nur verfolgen, ob er angeklickt wurde. Ich verstehe nicht, warum preventDefault() verwendet wird. Der Link sollte weiterhin auf die externe URL verweisen. – Jazzerus

+0

Sie fügen dem _gaq-Array die Link-Informationen hinzu, aber was dann? Wenn Sie sofort zum Verknüpfungsziel geleitet werden, geht _gaq [] verloren, es sei denn, Sie öffnen den Link in einem neuen Fenster. –

+0

Die Push-Funktion funktioniert nicht wie die Push-Funktion eines typischen Arrays - die gedrückten Elemente werden sofort ausgeführt. Siehe http://code.google.com/apis/analytics/docs/gaJSApi_gaq.html # _gaq.push für weitere Informationen – Jazzerus

2

Sie Attribut endet mit Wahl können auch, wenn Sie brauchen um Elemente mit einem bestimmten Endattribut zu erhalten. Etwas wie dieses:

$('a[href$=your text]') == "your text" 

Hoffe, dass dies jemand hilft.

1

Eine weitere einfache Möglichkeit ist:

$('a[href="MY_ANCHOR_TEXT_HERE"]'); 

Gibt die Liste aller Anker-Tags in der aktuellen Seite. Um die Anker-Tags in einem div-ID erhalten Sie verwenden können:

$('#MY_DIV_ID a[href="MY_ANCHOR_TEXT_HERE"]') 

die Größe benutzen Sie:

$('#MY_DIV_ID a[href="MY_ANCHOR_TEXT_HERE"]').size() 
0

Hier können Sie den Code:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
     <script> 
     $(document).ready(function(){ 
     $("a").each(function(){ 
    if($(this).attr("href") == "http://example.com/external/link/") 
    { 
     $(this).hide(); 
    } 
}); 
}); 
</script> 


<a href="http://example.com/external/link/">a website link</a> 
+0

Während dies funktioniert, würde ich empfehlen, es nicht so zu tun, da es jeden Anker auf der Website durchlaufen muss. Welches könnte Hunderte oder mehr sein. –

Verwandte Themen