I've got the following code to track pageviews for external links matching a particular URL.
$("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']);
});
}
});
This code works, but it's extremely inefficient for pages with a lot of links. Is there a way to use a selector to select all the anchors with matching hrefs instead of scanning through all the links on the page?
You can use the Attribute Starts With Selector
$('a[href^="http://example.com/external/link"]').click(function() {
_gaq.push(['_trackPageview', '/external/pagename']);
});
Yes
$('a[href^="http://example.com/external/link"]').click(function() {});
Using the attribute selector you can look for a particular href. Instead of the normal href= you might expect, I have used href^= which matches any element which starts with the specified string.
Also you do not need to use each to bind to the click event of all the anchor tags you will select. click() will automatically do this for you.
$("a[href^="http://example.com/external/link"]").click(function(){
_gaq.push(['_trackPageview', '/external/pagename']);
});
In jQuery getting all hrefs would be like:
var href = 'http://www.google.com';
var elements = $('a[href=' + href + ']');
alert("Found: " + elements.length);