Developpez.com - Rubrique JavaScript

Le Club des Développeurs et IT Pro

Débat : Quelles sont les évolutions et les incompatibilités de jQuery 1.3

Le 2009-01-15 16:20:15, par hansaplast, Membre éclairé
Bonjour,

je vient de constater que jquery 1.3 vient de sortir.

avez vous put le tester?
avez vous rencontrés des incompatibilités avec les scripts basés sur la version 1.2.x?

et, enfin, quels ajouts au final?

a noter : la nouvelle doc : http://api.jquery.com/

page officiel sur ces changements : http://docs.jquery.com/Release:jQuery_1.3
  Discussion forum
15 commentaires
  • Lideln75
    Membre régulier
    Je l'ai essayé, et j'ai un bug au niveau du sélecteur ">".
    Donc je suis repassé à la 1.2.6 en attendant de trouver un fix pour ce bug.
    Les chiffres annoncés en terme de performance pour la 1.3 sont impressionnants (par rapport à la 1.2.6 déjà, et aussi par rapport à toutes les autres lib).
  • Herode
    Membre éprouvé
    Ha, superbe !

    Je vais tout de même attendre la 1.3.1 pour essayer ça en production.

    Quelqu'un peut-il éclairer ma lanterne sur ce qu'est la "event delegation" par opposition, je suppose, au "event handling" ?
  • Pour moi l'une des principale nouveauté est l'évènement live.

    En effet, jusqu'à aujourd'hui lorsque vous définissiez une règle au document.ready, celle-ci s'appliquait sur les éléments du DOM qui existaient à ce moment là, mais si vous rajoutiez des éléments (ajax ou autres), la règle ne s'appliquait pas sur les nouveaux éléments.
    Il fallait alors recréer les règles aprés chaque modification du DOM, pas très pratique.

    Maintenant, c'est très simple :

    Code :
    1
    2
    3
       $("p").live("click", function(){
          $(this).after("<p>Another paragraph!</p>");
        });

    Vous avez aussi maintenant la possibilité de propager un évènement, via les trigger.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
        $("button:first").click(function () {
          update($("span:first"));
        });
        $("button:last").click(function () {
          $("button:first").trigger('click'); // Lance le click de bouton:first
    
          update($("span:last"));
        });
    Accessoirement, vous pouvez créer des éléments du DOM grâce à une syntaxe simplifiée :
    Code :
    $("<script/>") =  $(document.createElement("script"))
    Sinon, cette version 1.3 est surtout une amélioration technique permettant un gain de rapidité ( là où jquery était déjà bien en avance sur les autres .)
  • surfeurX
    Membre à l'essai
    Bonjour, la version 3 implemente aussi Sizzle qui est une librairie CSS3 très rapide "http://jamesdonaghue.com/static/peppy/profile/slickspeed/"et d'après ce que j'ai lu sur un article toutes les librairie vont suivre l'exemple du jquery "dojo, prototype ..." par consequent "peppy" qui est aussi une librairie très rapide, elle suppose que le page est static ce qui la rend incomplete.
    Bon developpement
  • SQUAL
    Membre habitué
    Envoyé par yotsumi
    Pour moi l'une des principale nouveauté est l'évènement live.

    En effet, jusqu'à aujourd'hui lorsque vous définissiez une règle au document.ready, celle-ci s'appliquait sur les éléments du DOM qui existaient à ce moment là, mais si vous rajoutiez des éléments (ajax ou autres), la règle ne s'appliquait pas sur les nouveaux éléments.
    Il fallait alors recréer les règles aprés chaque modification du DOM, pas très pratique.

    Maintenant, c'est très simple :

    Code :
    1
    2
    3
       $("p").live("click", function(){
          $(this).after("<p>Another paragraph!</p>");
        });
    Dans la doc :
    Code :
    1
    2
    .live doesn't support the no-event style callback that liveQuery provides. Only event handlers can be bound with .live.
    Au final on doit encore utiliser le plugin liveQuery ? non ?
  • Je pense que ta phrase est explicitée par cette quote de l'API :

    Possible event values: click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup
    Currently not supported: blur, focus, mouseenter, mouseleave, change, submit
    Donc tout dépend de ce que tu désire écouter comme élément live !
  • SQUAL
    Membre habitué
    Envoyé par yotsumi
    Je pense que cette phrase est explicité par cette quote de l'API :

    Donc tout dépend de ce que tu désire écouter comme élément live !
    Bah un exemple :
    Code :
    1
    2
    $('input').spinButton();
    Avec un load('page.html');, $('input').spinButton(); ne sera pas appliqué sur la page chargé. Ca ne requiert aucun evenement non ?
  • Envoyé par SQUAL
    Bah un exemple :
    Code :
    1
    2
    $('input').spinButton();
    Avec un load('page.html');, $('input').spinButton(); ne sera pas appliqué sur la page chargé. Ca ne requiert aucun evenement non ?
    Effectivement, tu as raison.

    Si on veut lancer une fonction sur un élément, par exemple mettre en corner certains div $(".corner".corner(); ou encore $("a.light".lightbox(), on ne pourra pas le faire avec cette version de .live

    Domage Il ne nous reste plus qu'à espérer que cette fonction soit améliorée dans les versions futures, en attendant liveQuery aura toujours son intéret !
  • JeitEmgie
    Expert confirmé
    conclusion de quelques tests de la 1.3.1 :

    encore trop de problèmes dans le selector…

    …inutilisable en production…

    (exemple :
    plusieurs groupes de radio dans un form :
    Code :
    1
    2
    $("input[@name='NAME_OF_RAGIO_GROUP']:checked").val()
    renverra toujours la valeur du radio sélectionné du PREMIER groupe…
    quelque soit la valeur de NAME_OF_RAGIO_GROUP…
    )
  • gtraxx
    Membre confirmé
    Cette syntaxe n'est plus valide, logique que sa déconne :

    Code :
    $("input[@name='NAME_OF_RAGIO_GROUP']:checked").val()
    On utilise plus le "@"