Skip to the content...

Welcome to the David Walsh Blog. I'm a MooTools, Dojo, jQuery, CSS, and PHP Web Developer located in Madison, Wisconsin, United States. Please contact me if I can make your experience on my website better.

External Site Link Favorite Icons Using MooTools and CSS

10 Responses »

I recently came upon an interesting jQuery article about how you can retrieve all external links within a page, build the address of the site's favorite icon, and place the favorite icon along side the link. I've chosen a different approach which uses CSS to position the favorite icon as a background image.

The CSS

.favicon	{ background-repeat:no-repeat; padding:2px 0 3px 22px; }

This CSS code will provide padding and background image placement for the link.

The MooTools JavaScript

/* when the dom is ready... */
window.addEvent('domready',function() {
	/* grab all complete linked anchors */
	$$('a[href^="http://"]').each(function(a) {
		/* if it's not on the davidwalsh.name domain */
		if(!a.get('href').contains(window.location.host)) {
			/* get the favicon */
			var favicon = a.get('href').replace(/^(http:\/\/[^\/]+).*$/, '$1') + '/favicon.ico';
			/* place it in the anchor */
			a.setStyle('background-image','url(' + favicon + ')').addClass('favicon');
		}
	});
});

I've chosen to include the favorite icon as a background image as opposed to the jQuery article's method of injecting an image.

Would you use this method on your website?

Discussion

  1. May 21, 2009 @ 8:21 am

    This is great, simple and effective, thanks David.

  2. May 21, 2009 @ 8:41 am

    You can also use the new MooTools More URI syntax which also works with base-tags.

    window.addEvent(‘domready’,function(){
    var baseHost = URI.base.get(‘host’);
    $$(‘a[href^="http://"]‘).each(function(a){
    var uri = new URI(a);
    if(baseHost != uri.get(‘host’)){
    var favicon = new URI(‘/favicon.ico’, { base: uri });
    a.setStyle(‘background-image’,'url(‘ + favicon + ‘)’).addClass(‘favicon’);
    }
    });
    });

  3. jan
    May 21, 2009 @ 8:51 am

    Grat one, even better idea!!! I created something similar adding icon to for all external links using URI subclass http://mootools.net/docs/more/Native/URI

    window.addEvent(‘domready’,function() {
    var host = window.location.host;
    var links = $$(‘a’);
    links.each(function(elem,i){
    var myURI = new URI(elem.get(‘href’));
    var hostExtern = myURI.get(‘host’);
    if(hostExtern!=host) {
    elem.addClass(‘web’);
    }
    })
    })

  4. May 21, 2009 @ 8:54 am

    Actually, since you’re not using the link URI for anything else you don’t have to create another object.

    Just use uri.set(‘value’, ‘/favicon.ico’); Set value will take relative paths.

  5. May 21, 2009 @ 9:12 am

    Nice one David! Simple but very effective!

  6. dirkf
    May 21, 2009 @ 2:03 pm

    Cool idea !

    As not all website are having a favicon, I added some stuff to check if the favicon is properly loaded.
    If not, the background-image should not be changed, and remains the default image I use to indicate external links.

    My inner code block looks like this:

    var favicon = href.replace(/^(http:\/\/[^\/]+).*$/, ‘$1′) + ‘/favicon.ico’,
    img = new Image();

    img.onload = function(){
    a.setStyle(‘background-image’,'url(‘ + favicon + ‘)’);
    }
    img.src = favicon; //load it now.

  7. May 21, 2009 @ 4:05 pm

    Nice idea, this could be usefull for my next linklist ^^

  8. facundo
    May 21, 2009 @ 6:42 pm

    Complete offtopic: Can you move the site search box to a more prominent place? It took me some time to find it….

  9. July 16, 2009 @ 10:00 pm

    Here is a simple step by step tutorials to create your own FAVICON easily on
    photoshop cs version.
    How to create FAVICON using Photoshop?

  10. karev
    July 21, 2010 @ 3:11 pm

    really usefull but how can i disable this feature for linked images ???????

Be Heard!

Share your thoughts with fellow developers of all skill levels! I want to hear from you!

Name*:
Email*:
Website:  
Wrap your code with <code> tags, f00!