L'abus de JQuery est mauvais pour le code

Un collègue de boulot a voulu tester un thème de Pluxml pour son site web. Il s'est retrouvé face à un petit plantage javascript pas vraiment grave mais qui illustre pour moi ce qu'est devenu une partie du dev web ces dernières années.

Peu importe de quel thème il s'agit, ce qu'il faut juste savoir c'est que le gabarit d'en-tête contient le code suivant :

$(document).ready(function () {
    $('pre > code').each(function (i, e) {
        hljs.highlightBlock(e, '    ');
    });
});
Code javascript de lancement de la librairie highlight.js.

Donc, le gars à besoin d'une librairie javascript complète comme JQuery pour quoi ? Pour récupérer les éléments code enfant d'éléments pre et appliquer à chacun d'entre eux un traitement particulier (en l'occurrence de la coloration syntaxique), le tout après que le document soit chargé. Il n'y a aucun autre usage du javascript ailleurs.

Le problème, c'est que JQuery n'est chargé nulle part dans le thème ; ce code est un simple copié / collé de l'exemple d'utilisation fournit par la librairie highlight.js, justement quand l'utilisateur veut la lancer avec JQuery. Le gars a donc très certainement dû reprendre ce code pour le coller dans son thème sans comprendre vraiment ce qu'il faisait.

C'est ce qui arrive de plus en plus souvent aujourd'hui : des types qui se disent développeur javascript mais en fait ne savent utiliser que JQuery, parfois sans même comprendre ce que la librairie fait vraiment et - plus grave encore - ce que les morceaux de code qu'ils copient sur le réseau font. Et vous arrivez à des aberrations de ce type, voir pire dans le domaine professionnel...

A titre d'information, voilà ce qu'on pourrait écrire avec du javascript « simple » à placer en fin de document pour obtenir le même résultat :

var blocks = document.body.querySelectorAll('pre > code'),
    n = blocks.length,
    i = 0;
for (i = 0; i < n; i += 1) {
    hljs.highlightBlock(blocks[i], '    ');
}
Code comparable sans JQuery.

Si vous voulez que cela soit compatible avec IE 7 qui ne comprend pas l'API de sélecteurs ça prend quoi, 2-3 lignes de code supplémentaires.