Billet du blogue

jQuery.liensExternes

Le but de ce billet n’est pas de relancer le débat à savoir si faire ouvrir un lien dans une nouvelle fenêtre est une bonne pratique. Parfois, c’est ce que le client veut et il ne veut pas changer d’idée. Et on le sait, le fait de donner un attribut target en XHTML stricte n’est pas valide. Cependant, si on donne cet attribut à un objet DOM, le navigateur le traite correctement.

Voici donc une petite extension à l’objet jQuery qui parcours tous les liens dans la page active et modifie l’attribut TARGET de ces-derniers selon s’ils pointent vers un site externe ou un document PDF. La méthode prend aussi un seul paramètre — un objet — qui prend une variable, exclude qui est une expression régulière servant à exclure certains domaines.

(function($) {
    $.fn.extend({
        /**
         * Liens externes automatiques
         *
         * @param {Object} params
         * @return {Void}
         */
        'liensExternes': function(params){

            params = $.extend({
                exclude : /^$/
            }, params);

            $(this)
            .filter(function() {
                var $this = $(this);
                if ($this.is('a[@href$=\.pdf]')) { return true; } // Fichiers PDF
                if ($this.is("a[@href^=http]") && !$this.attr('href').match(params.exclude)) { return true; } // Liens commencant par "http" mais non exclus
            })
            .addClass('externe')
            .attr('target', '_blank')
        }
    })
})

Une fois cette extension définie, on peut donc l’initialiser au $(document).ready :

$(document).ready(function() {
    $.liensExternes({
        exclude : window.location.host
    });
});

Voilà ! C’est encore une méthode très simple, mais elle sera développée au cours des prochaines semaines. Ça me fait penser que je devrais créer un 4ème dépôt SVN contenant des petits snippets comme celui-ci…

Posté le avec les tags: .

Commentaires fermés

Les commentaires pour ce billet ont été désactivés un mois après la date de publication de ce-dernier. Vous désirez exprimer votre opinion sur ce billet malgré le fait que les commentaires aient été désactivés ? Utilisez le formulaire de contact.


Fil atom des commentaires de ce billet0 commentaires

Aucun commentaire n'a été posté pour ce billet.