Je démarre un projet avec jQuery.
Quels pièges / erreurs / idées fausses / abus / abus avez-vous eu dans votre projet jQuery?
javascript
jquery
flybywire
la source
la source
Réponses:
Ignorer les performances atteintes et sur-utiliser les sélecteurs au lieu de les affecter à des variables locales. Par exemple:-
Plutôt que:-
Ou encore mieux avec enchaînement : -
J'ai trouvé cela le moment instructif quand j'ai réalisé comment les piles d'appels fonctionnent.
Edit: incorporé des suggestions dans les commentaires.
la source
var $label = $('#label');
Comprenez comment utiliser le contexte. Normalement, un sélecteur jQuery recherchera tout le document:
Mais vous pouvez accélérer les choses en recherchant dans un contexte:
la source
[0]
.$('.myClass', ct);
ou si vous savez que ct est une instance de jQuery, vous pouvez utiliser findct.find(".myClass")
N'utilisez pas de sélecteurs de classe nus, comme ceci:
Cela finira par regarder chaque élément pour voir s'il a une classe de "bouton".
Au lieu de cela, vous pouvez l'aider, comme:
J'ai appris cela l'année dernière sur le blog de Rebecca Murphy
Mise à jour - Cette réponse a été donnée il y a plus de 2 ans et n'est pas correcte pour la version actuelle de jQuery. L'un des commentaires comprend un test pour le prouver. Il existe également une version mise à jour du test qui inclut la version de jQuery au moment de cette réponse.
la source
$('.b')
pourrait utiliserdocument.getElementsByClassName('b')
si le navigateur le prend en charge, mais cela$('a.b')
entraînera l'obtention de tous les éléments correspondants avec la classeb
, puis confirmera qu'ils sont des ancres dans une opération en deux étapes. Ce dernier me semble plus de travail. Pour une analogie réelle, essayez ceci: trouvez toutes les chaussettes dans ma chambre. Maintenant, jetez ceux qui ne sont pas dans ma commode.Essayez de diviser les fonctions anonymes afin de pouvoir les réutiliser.
la source
(anonymous)
. En savoir plus sur cette astuce ici: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…J'ai vu des centaines de lignes de code à l'intérieur de l'instruction doc ready. Moche, illisible et impossible à entretenir.
la source
Lors de l'utilisation de la
$.ajax
fonction pour les demandes Ajax au serveur, vous devez éviter d'utiliser l'complete
événement pour traiter les données de réponse. Il se déclenchera si la demande a réussi ou non.Plutôt que d'
complete
utilisersuccess
.Voir les événements Ajax dans la documentation.
la source
"Chaînage" d'événements d'animation avec rappels.
Supposons que vous vouliez animer un paragraphe disparaissant en cliquant dessus. Vous vouliez également supprimer l'élément du DOM par la suite. Vous pouvez penser que vous pouvez simplement enchaîner les méthodes:
Dans cet exemple, .remove () sera appelé avant la fin de .fadeOut (), détruisant votre effet de fondu progressif et faisant simplement disparaître l'élément instantanément. Au lieu de cela, lorsque vous souhaitez lancer une commande uniquement après avoir terminé la précédente, utilisez le rappel:
Le deuxième paramètre de .fadeOut () est une fonction anonyme qui s'exécutera une fois l'animation .fadeOut () terminée. Cela se traduit par une décoloration progressive et une suppression ultérieure de l'élément.
la source
Si vous liez () le même événement plusieurs fois, il se déclenchera plusieurs fois. Je vais d'habitude toujours
unbind('click').bind('click')
juste pour être en sécuritéla source
N'abusez pas des plug-ins.
La plupart du temps, vous n'aurez besoin que de la bibliothèque et peut-être de l'interface utilisateur. Si vous restez simple, votre code sera maintenable à long terme. Tous les plug-ins ne sont pas pris en charge et maintenus, en fait la plupart ne le sont pas. Si vous pouvez imiter la fonctionnalité en utilisant des éléments de base, je le recommande fortement.
Les plug-ins sont faciles à insérer dans votre code, vous font gagner du temps, mais lorsque vous aurez besoin de quelque chose en plus, ce n'est pas une bonne idée de les modifier, car vous perdez les mises à jour possibles. Le temps que vous économisez au début vous perdra plus tard lors de la modification des plug-ins obsolètes.
Choisissez judicieusement les plug-ins que vous utilisez. Outre la bibliothèque et l'interface utilisateur, j'utilise constamment $ .cookie , $ .form , $ .validate et thickbox . Pour le reste, je développe principalement mes propres plug-ins.
la source
Piège: utiliser des boucles au lieu de sélecteurs.
Si vous vous retrouvez à utiliser la méthode jQuery '.each' pour parcourir les éléments DOM, demandez-vous si vous pouvez utiliser un sélecteur pour obtenir les éléments à la place.
Plus d'informations sur les sélecteurs jQuery:
http://docs.jquery.com/Selectors
Piège: NE PAS utiliser un outil comme Firebug
Firebug a été pratiquement conçu pour ce type de débogage. Si vous allez fouiner dans le DOM avec Javascript, vous avez besoin d'un bon outil comme Firebug pour vous donner de la visibilité.
Plus d'informations sur Firebug: http://getfirebug.com/
D'autres bonnes idées sont dans cet épisode du podcast polymorphe: (jQuery Secrets avec Dave Ward) http://polymorphicpodcast.com/shows/jquery/
la source
Mauvaise compréhension de l'utilisation de cet identifiant dans le bon contexte. Par exemple:
Et voici l'un des exemples de la façon dont vous pouvez le résoudre:
la source
Évitez de rechercher plusieurs fois dans l'ensemble du DOM. C'est quelque chose qui peut vraiment retarder votre script.
Mauvais:
Bien:
Mauvais:
Bien:
la source
Mettez toujours $ (this) en cache dans une variable significative, en particulier dans un .each ()
Comme ça
la source
$self
ou$this
si vous êtes trop paresseux pour penser à un bon nom de variable.Similaire à ce que Repo Man a dit, mais pas tout à fait.
Lors du développement de winforms ASP.NET, je le fais souvent
en oubliant le signe #. La forme correcte est
la source
Événements
ne clone aucun des événements - vous devez tous les relier.
Selon le commentaire de JP - clone () lie les événements si vous passez vrai.
la source
Évitez la création multiple des mêmes objets jQuery
la source
$this = $(this);
sur une ligne distincte. Si vous le pouvez (sans faire de gâchis), oubliez$this
tout et enchaînez tout:$(this).fadeIn().fadeIn();
Je dis cela pour JavaScript également, mais jQuery, JavaScript ne doit JAMAIS remplacer CSS.
Assurez-vous également que le site est utilisable pour quelqu'un avec JavaScript désactivé (pas aussi pertinent aujourd'hui que dans le passé, mais toujours agréable d'avoir un site entièrement utilisable).
la source
Faire trop de manipulations DOM. Bien que les méthodes .html (), .append (), .prepend (), etc. soient excellentes, en raison de la façon dont les navigateurs effectuent le rendu et le rendu des pages, leur utilisation trop fréquente entraînera des ralentissements. Il est souvent préférable de créer le html sous forme de chaîne et de l'inclure une fois dans le DOM, plutôt que de le changer plusieurs fois.
Au lieu de:
Essaye ça:
Ou même ceci ($ wrapper est un élément nouvellement créé qui n'a pas encore été injecté dans le DOM. L'ajout de nœuds à cette div wrapper ne provoque pas de ralentissements, et à la fin nous ajoutons $ wrapper à $ parent, en utilisant une seule manipulation DOM ):
la source
Utilisation de ClientID pour obtenir l'ID "réel" du contrôle dans les projets ASP.NET.
De plus, si vous utilisez jQuery dans SharePoint, vous devez appeler jQuery.noConflict ().
la source
Passer des ID au lieu d'objets jQuery aux fonctions:
Passer un ensemble enveloppé est beaucoup plus flexible:
la source
Utilisation excessive du chaînage.
Regarde ça:
Explication
la source
Utilisez des chaînes de style accumulateur
En utilisant l'opérateur +, une nouvelle chaîne est créée en mémoire et la valeur concaténée lui est affectée. Ce n'est qu'après cela que le résultat est attribué à une variable. Pour éviter la variable intermédiaire pour le résultat de la concaténation, vous pouvez affecter directement le résultat à l'aide de l'opérateur + =. Lent:
Plus rapide:
Les opérations primitives peuvent être plus rapides que les appels de fonction
Envisagez d'utiliser un fonctionnement primitif alternatif par rapport aux appels de fonction dans les boucles et fonctions critiques pour les performances. Lent:
Plus rapide:
Lire la suite sur les meilleures pratiques de performance JavaScript
la source
Si vous souhaitez que les utilisateurs voient les entités html dans leur navigateur, utilisez «html» au lieu de «texte» pour injecter une chaîne Unicode, comme:
la source
mes deux centimes)
Habituellement, travailler avec jquery signifie que vous n'avez pas à vous soucier des éléments DOM réels tout le temps. Vous pouvez écrire quelque chose comme ça -
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
- et ce code s'exécutera sans lancer d'erreurs.Dans certains cas, cela est utile, dans certains cas - pas du tout, mais c'est un fait que jquery a tendance à être, bien, compatible avec les correspondances vides. Encore,
replaceWith
jettera une erreur si l'on essaie de l'utiliser avec un élément qui n'appartient pas au document. Je le trouve plutôt contre-intuitif.Un autre écueil est, à mon avis, l'ordre des nœuds retournés par la méthode prevAll () -
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. Ce n'est pas grave, en fait, mais nous devons garder à l'esprit ce fait.la source
Si vous prévoyez Ajax dans de nombreuses données, comme disons 1500 lignes d'une table avec 20 colonnes, alors ne pensez même pas à utiliser jQuery pour insérer ces données dans votre code HTML. Utilisez du JavaScript simple. jQuery sera trop lent sur les machines plus lentes.
De plus, la moitié du temps, jQuery fera des choses qui le ralentiront, comme essayer d'analyser les balises de script dans le code HTML entrant et de gérer les bizarreries du navigateur. Si vous voulez une vitesse d'insertion rapide, restez avec du JavaScript simple.
la source
.innerHTML
sera le cas. Mais si vous créez quelque chose comme Gmail où l'utilisateur garde l'onglet ouvert pendant des heures, vous allez juste devoir mordre la balle et faire face à la lenteur supplémentaire. Pour les curieux, voici exactement ce que fait jQuery.html()
: james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlUtiliser jQuery dans un petit projet qui peut être complété avec seulement quelques lignes de JavaScript ordinaire.
la source
couple of lines of ordinary JavaScript
Bien sûr pas de problème. Mais quand est-ce que c'est juste ça? Les gens qui disent "pourquoi ne pas utiliser la vanille javascript ??" n'ont pas encore été mordus assez durement par IE ... et sans parler de la quantité de code cru et standard que vous devez écrire pour faire des choses simples dans le vieux JS.Ne pas comprendre la liaison d'événement. JavaScript et jQuery fonctionnent différemment.
À la demande générale, un exemple:
Dans jQuery:
Sans jQuery:
Fondamentalement, les crochets requis pour JavaScript ne sont plus nécessaires. C'est-à-dire utiliser le balisage en ligne (onClick, etc.) parce que vous pouvez simplement utiliser les ID et les classes qu'un développeur exploiterait normalement à des fins CSS.
la source