Suite de mes impressions sur jQuery.
Le premier billet est ici : jQuery / prototype - partie 1.
Pour rappel : je ne suis pour le moment pas un cador de jQuery donc il est possible que vous ayez des solutions à certains problèmes que je soulève, n'hésitez pas à réagir dans les commentaires.
Ajax
C'est pas mal avec "get", "post" et "ajax", cette dernière étant plus bas niveau. "get" et "post" sont en effet des wrappers de "ajax", elles l'appellent avec déjà certains paramètres. Par contre elles ne proposent qu'un seul callback, appelé si la requête est terminée et avec succès, là où "ajax" en propose plus. Là où prototype ne propose qu'une méthode pour les requêtes simples, on a donc avec jQuery 2 niveaux de complexité, à choisir suivant les cas, pourquoi pas...
Par contre jQuery ne propose pas de wrappers équivalents à "Ajax.Updater" et "Ajax.PeriodicalUpdater". Pour le premier, ce n'est pas vraiment un problème. Par contre pour le "PeriodicalUpdater", c'est plus compliqué. Dommage, il ne serait pourtant pas très compliqué d'obtenir les mêmes comportements avec les méthodes existantes dans jQuery, en ajoutant quelques paramètres optionnels.
API et fonctionnalités
Clairement, l'API de jQuery est beaucoup moins fournie que celle de prototype et cela pour 2 raisons : elle est mieux pensée et le framework fait moins de choses.
Commençons par le bon point : une API mieux pensée, plus claire, plus intuitive. Cela tient principalement à la surcharge des méthodes. Par ex : element.methode() -> lecture ; element.methode(valeur) -> écriture. Il y a ainsi beaucoup moins de noms de méthodes à retenir. Par contre il faut bien sûr essayer de se souvenir des différentes versions de chaque méhtodes.
On a ainsi la méthode "$" qui fait pas mal de choses fort utiles.
Mais malgré ses points sympas, il faut bien le reconnaître, jQuery n'offre pas (encore) autant de fonctionnalités que prototype. Ex : les manips de chaines, de tableaux, de nombres mais aussi les sujets abordés dans ce post : ajax, évènements...
Du coup, on cherche dans l'API comment faire, on voit que rien n'est proposé, il faut ensuite chercher un plugin, voir lequel pourrait être le meilleur entre les différents résultats, voir ensuite comment utiliser celui choisi...
Ne serait-ce que pour créer des éléments dans le DOM, je n'ai rien vu dans jQuery alors je me suis tourné vers les plguins, j'ai trouvé ça abusé ! Imaginez, tous les plugins se doivent d'être fonctionnels avec un jQuery de base, donc chaque plugin qui doit créer des éléments DOM va utiliser les méthodes JS de base... Le code de tous les plugins serait réduit juste en intégrant cette fonctionnalité à jQuery !
Le chaînage des appels
C'est un argument souvent mis en avant pour parler de jQuery. Effectivement, c'est pratique et bien foutu. Il est également possible de chaîner des appels avec prototype mais jQuery en permet une utilisation plus poussée (cela tient aussi à son API).
Sélecteurs CSS
L'autre argument qui revient souvent est la sélection "CSS style". Ba oui et alors ? prototype aussi le fait ! ex : $$('table tbody > tr:nth-child(even)'); Cela dit, je crois que jQuery supporte plus de sélecteurs. Je pense notamment à ceux spécifiques aux éléments de formulaire.
En vrac
L'une des bonnes idées de jQuery est la méthode "noConflict". Cela permet d'utiliser jQuery en même temps qu'un autre framework JS qui définirait lui aussi la méthode "$" (ex : prototype). jQuery laisse ainsi la main à son voisin pour cette méthode, pour l'appeler lui il faudra passer explicitement par la méthode "jQuery".
On a aussi l'intégration d'effets visuels basiques, ça peut servir de roue de secours, sans avoir à sortir jQuery UI (cf. mon billet précédent).
Et enfin, le fait d'avoir une version officielle compressée, j'adore !
Conclusion
jQuery : bon élève, doit continuer.
Il est facile et intuitif d'utilisation, bien pensé et ce qu'il fait, il le fait bien, sauf qu'il y a encore pas mal de choses qu'il ne fait pas !
Adopté pour mes projets persos, mais pas au boulot.
A voir comment il va évoluer...
Articles similaires
- Quand un habitué de Prototype teste jQuery - part. 1 : un problème de taille
- Petit bug jQuery / TinyMCE
- Diaporama automatique avec Lightbox
- Validateur W3C en local sous Mac OSX
- Redirection par .htaccess après migration d'un site
- Comment choisir son langage/framework de développement web?
- Obtenez votre invitation à Google WAVE
- Installation de Trac chez l'hébergeur Dreamhost, en un clic
- Cherchez vos torrents sur PirateBay depuis Vuze
- Azureus ou Vuze, le client P2P parfait ?



Créer un élément du DOM
Bonjour,
Je ne comprends pas trop ce que tu reproches à jQuery concernant la création d'éléments du DOM, il y a pourtant pléthore de fonctions faites pour cela :
http://docs.jquery.com/Manipulation
édition, oui, création, non
bonjour,
et bien quand je regarde l'API je vois effectivement moult méthodes pour manipuler, aucune pour créer... je parle bien de créer des noeux DOM, des wrappers pour domcument.createElement. et donc le plugin domec déclare "jQuery.create()".
dans prototype, tu as "new Element()".
Dia
Il suffit de faire $("")
Il suffit de faire $("
") pour créer un élément.
").attr('src','images/image.gif').appendTo("body") pour l'ajouter au body et définir l'image.
$("
Simple et intuitif non ? Pas besoin de méthodes en plus.
correction
bug d'affichage, il fallait lire $("<img>") et non $(" ");
tout à fait, mais...
oui oui effectivement, la technique évoquée est tout à fait utilisable
cependant, je vous renvoie à la doc :
-----
jQuery( html, [ownerDocument] )
Create DOM elements on-the-fly from the provided String of raw HTML.
Simple elements without attributes, e.g., "< div / >", are created via document.createElement. All other cases are parsed by assigning the string to the .innerHTML property of a div element. The HTML string cannot contain elements that are invalid within a div, such as html, head, body, or title elements.
All HTML must be well-formed, otherwise it may not work correctly across all browsers. This includes the case where $("") may not work but $("") will (note the XML-style closing slash).
-----
il faut donc connaitre la syntaxe exacte du code à générer et bien vérifier qu'on ne s'est pas trompé, or si j'utilise un manipulateur de DOM c'est justement pour lui laisser gérer la partie HTML et me concentrer sur la partie DOM pure (noeuds, attributs, arbo...)
de plus, la syntaxe du plugin jdomec est plus simple pour créer des éléments que la méthode que vous décrivez
Dia
Je cite : Mais malgré ses
Je cite :
Mais malgré ses points sympas, il faut bien le reconnaître, jQuery n'offre pas (encore) autant de fonctionnalités que prototype. Ex : les manips de chaines, de tableaux, de nombres mais aussi les sujets abordés dans ce post : ajax, évènements...
En effet, mais ce n'est pas un mauvais point pour certaines choses. Jquery à la base ne change pas les objets tels que les tableaux, etc...
Car c'est le principe de base de la bibliothèque.
D'ailleurs, je me demande si on peut vraiment comparer prototype et jQuery. Ils n'ont pas vraiment les mêmes buts.
Ou l'exemple ci-dessus en
Ou l'exemple ci-dessus en plus simple :
$('< img src="images/image.gif / >"').appendTo("body");
On peut ainsi faire un système très simple de template avec des {var} et la méthode replace avant de l'injecter.
Création via le DOM ou via innerHTML, il n'y a pas de différence à ma connaissance, le choix en revient au développeur.
Re:
> D'ailleurs, je me demande si on peut vraiment comparer prototype et jQuery. Ils n'ont pas vraiment les mêmes buts.
les 2 mettent en avant le fait de simplifier l'écriture du code JS (ce qui est quand même bien la raison d'être de ce genre d'outils !) et l'utilisation d'Ajax
j'admets ne pas avoir assez de recul sur jQuery pour savoir si les développeurs pensent à terme intégrer à leur outil autant de méthodes utilitaires de manipulation d'objets JS de base qu'il peut en exister dans prototype ou s'ils souhaitent laisser cette partie en l'état
> Création via le DOM ou via innerHTML, il n'y a pas de différence à ma connaissance, le choix en revient au développeur.
je vous conseille cette intéressante lecture : http://www.snook.ca/archives/javascript/whats_wrong_wit
je me permets d'en citer un extrait qui je trouve résume assez bien :
innerHTML is fast, easy, proprietary and heavy-handed.
DOM methods are slower, long-winded, standardised and precise.
Dia
Framework
Pour moi, l'un des points les plus importants, c'est que les librairies JS tels que JQuery et comparse permettent aux WebDEV de s'affranchir du '...Sa marchera sous IE6?' LOL.
Comme dit précédemment, Jquery c'est la simplicité à l'état pur, les fonctionnalités en pâtissent c'est certain. Comparé Jquery & Prototype ce serait comme comparé CakePHP au Zend Framework. Simple d'un côté mais bridé et de l'autre plus difficile a appréhender mais plus fonctionnels. Maintenant sa dépend du projet, sur lequel on bosse.
Je conseil aux débutants en AJAX 'facile' (c.a.d. sans le bordélique XMLHttpRequest) JQuery (par extension UI fais de belle chose simplement aussi), au moins sa les traumatisera pas.
J'aime bien cette article c'est relativement intéressant, surtout les feedbacks.