2011-01-07 18 views
13

Tengo el siguiente código para rastrear páginas vistas de enlaces externos que coinciden con una URL en particular.¿Cómo selecciono todos los anclajes con un href específico?

$("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']); 
      }); 
     } 
    }); 

Este código funciona, pero es extremadamente ineficiente para páginas con muchos enlaces. ¿Hay alguna manera de usar un selector para seleccionar todos los anclajes con hrefs coincidentes en lugar de explorar todos los enlaces de la página?

Respuesta

46

Puede utilizar el Attribute Starts With Selector

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

¡Así es como se hace! Puede usar esto en conjunción con mi [complemento Google Analytics] (http://writeless.se/2011/01/a-no-fuzz-asynchronous-google-analytics-plugin/) – mekwall

10

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

Uso del selector de atributo que puede buscar un determinado href. En lugar del normal href= que podría esperar, he usado href^= que coincide con cualquier elemento que comience con la cadena especificada.

Además, no necesita utilizar each para enlazar al evento click de todas las etiquetas de anclaje que seleccione. click() automáticamente hará esto por usted.

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

En jQuery conseguir todos hrefs sería como:

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

The attr ('href') de el enlace es conocido, simplemente quiero rastrear si se hizo clic. No entiendo por qué se usa preventDefault(). El enlace aún debe hacer clic en la URL externa. – Jazzerus

+0

Está agregando la información del enlace a la matriz _gaq, pero ¿luego qué? Si lo llevan inmediatamente al destino del enlace, se perderá _gaq [], a menos que tal vez esté abriendo el enlace en una nueva ventana. –

+0

la función .push no funciona como la función push() de una matriz típica: los elementos que se presionan se ejecutan inmediatamente. Ver http://code.google.com/apis/analytics/docs/gaJS/gaJSApi_gaq.html # _gaq.push para obtener más información – Jazzerus

2

Puede utilizar el atributo termina con el selector, así si es necesario para obtener elementos con algún atributo de final específico. Algo como esto:

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

Espero que esto ayude a alguien.

1

Otra forma sencilla es:

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

indica la lista de todas las etiquetas de anclaje en la página actual. para obtener el etiquetas de anclaje en un ID div puede utilizar:

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

Para obtener el uso Tamaño:

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

Aquí puede el código:

<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

Si bien esto funciona, recomendaría no hacerlo de esta manera, ya que tiene que recorrer cada ancla en el sitio web. Que podrían ser cientos o más. –

Cuestiones relacionadas