2011-01-07 3 views
13

У меня есть следующий код для отслеживания просмотров страниц для внешних ссылок, соответствующих определенному URL-адресу.Как выбрать все привязки с определенным href?

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

Этот код работает, но он крайне неэффективен для страниц с большим количеством ссылок. Есть ли способ использовать селектор для выбора всех якорей с соответствующими hrefs вместо сканирования по всем ссылкам на странице?

ответ

46

Вы можете использовать Attribute Starts With Selector

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

Вот как это делается! Вы можете использовать это в сочетании с моим [плагином 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() {}); 

Использование селектора атрибутов вы можете посмотреть для конкретного href. Вместо обычного href= вы можете ожидать, я использовал href^=, который соответствует любому элементу, который начинает с указанной строкой.

Также вам не нужно использовать each для привязки к событию клика всех выбранных тегов привязки. click() автоматически сделает это за вас.

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

В JQuery получить все hrefs бы как:

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

Attr ('href') of ссылка известна, я просто хочу отслеживать, была ли она нажата. Я не понимаю, почему используется функция preventDefault(). Ссылка должна по-прежнему переходить на внешний URL. – Jazzerus

+0

Вы добавляете информацию о ссылке в массив _gaq, но потом что? Если вы сразу попадете в пункт назначения ссылки, _gaq [] будет потерян, если, возможно, вы не откроете ссылку в новом окне. –

+0

. Функция push не работает, как функция push() типичного массива - элементы, нажатые, выполняются немедленно. См. Http://code.google.com/apis/analytics/docs/gaJS/gaJSApi_gaq.html # _gaq.push для получения дополнительной информации – Jazzerus

2

Вы можете использовать атрибут заканчивается селектор, а если вам нужно для получения элементов с определенным атрибутом окончания. Что-то вроде этого:

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

Надеюсь, это поможет кому-то.

1

Другой простой способ:

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

Выдает список всех тегов привязки в текущей странице. Чтобы получить теги привязки в сНу ID вы можете использовать:

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

Чтобы использовать размер:

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

Здесь вы можете код:

<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

Хотя это действительно работает, я бы порекомендовал не делать этого таким образом, так как он должен прокручивать каждый якорь на веб-сайте. Это может быть сотни или более. –

Смежные вопросы