I was working on a website for my fiancee and her church group called The Diocese of Atlanta Young Adults. They were hosting an event they call the Young Adult Summit.One of the requirements I had was to provide a warning to users before they left the page by after having clicked an external link. Using jQuery, I was able to bind to the click event with easy cross browser compatibility and I used jQueryUI to open a modal dialog box. Pretty basic stuff.
The one thing I regretted was that I had to use a class name to determine which links were external and which were internal. A few days ago, I discovered that jQuery supports custom selectors and I decided to write a pair of custom selectors for identifying internal and external links.
jQuery.extend(
jQuery.expr[ ":" ],
{
/*
/:\/\// is simply looking for a protocol definition.
technically it would be better to check the domain
name of the link, but i always use relative links
for internal links.
*/
external: function(obj, index, meta, stack)
{
return /:\/\//.test($(obj).attr("href"));
},
internal: function(obj, index, meta, stack)
{
return !/:\/\//.test($(obj).attr("href"));
}
}
);I do have a few items of note. First, you'll notice that I'm not actually looking for the current domain name in the links. That's because I use relative links for all of my internal links these days. Thus, I know that if there's not a protocol definition that it's an internal link. If you need to identify internal links by domain as well, you can just pull that out of top.location.href and check for it too.Second, you could technically use this selector on any DOM object. There are several ways to get around this. One way would be to verify that the object is an anchor tag. Another would be to verify that the href attribute exists. I just plan on using common sense.
Here's a quick usage example:
$("a:external").click(verifyNavigateAway);
$("a:internal").css("font-weight", "bold");
I really appreciate comments so please feel free to comment on my posts. Whether you agree or disagree, I'd love to hear from you. Also, feel free to link back to your own blog in your comments. You can even subscribe to an RSS feed of the comments on this thread.
© 2008 , D. Patrick Caldwell, President, Autopilot Consulting, LLC
© 2008 , D. Patrick Caldwell, President, Autopilot Consulting, LLC
click for more information
Thanks - this helped me hack something into a site that would have otherwise required me to edit hundreds of joomla articles one at a time adding a class to all of the internal links.
ReplyDeleteMuch appreciated