Syntaxe
- Sténographie pour le prêt-événement par roosteronacid
- Ruptures de ligne et chaînabilité par le coqéronacide
- Filtres emboîtables par Nathan Long
- Mettre en cache une collection et exécuter des commandes sur la même ligne par roosteronacid
- Contient un sélecteur de roosteronacid
- Définition des propriétés à la création d'élément par roosteronacid
- Accédez aux fonctions jQuery comme vous le feriez avec un tableau par roosteronacid
- La fonction noConflict - Libérer la variable $ par Oli
- Isolez la variable $ en mode noConflict par nickf
- Mode sans conflit par roosteronacid
Stockage de données
- La fonction de données - lier des données à des éléments par TenebrousX
- Prise en charge des attributs de données HTML5, sur les stéroïdes! par roosteronacid
- Le plug-in de métadonnées jQuery par Filip Dupanović
Optimisation
- Optimiser les performances des sélecteurs complexes par roosteronacid
- Le paramètre de contexte par lupefiasco
- Sauvegarde et réutilisation des recherches par Nathan Long
- Créer un élément HTML et conserver une référence, Vérifier si un élément existe, Écrire vos propres sélecteurs par Andreas Grech
Divers
- Vérifier l'index d'un élément dans une collection par redsquare
- Gestionnaires d'événements en direct par TM
- Remplacer les fonctions anonymes par des fonctions nommées par ken
- Framework Microsoft AJAX et pont jQuery par Slace
- Tutoriels jQuery par egyamado
- Supprimer des éléments d'une collection et préserver la chaîne grâce au roosteronacid
- Déclarez $ this au début des fonctions anonymes par Ben
- FireBug Lite, plug-in Hotbox, indique quand une image a été chargée et Google CDN par Color Blend
- Utilisation judicieuse de scripts jQuery tiers par harriyott
- La fonction de Jan Zich
- Module d'extension de formulaire par Chris S
- Chaque fonction asynchrone par OneNerd
- Le plug-in de modèle jQuery: implémentation d'une logique complexe à l'aide de fonctions de rendu par roosteronacid
javascript
jquery
roosteronacid
la source
la source
if ((var someDiv = $("#someDiv")).length) { /* do stuff with someDiv... */ }
someDiv
avoir une portée dans laif
déclaration, car ce n'est pas le cas; JavaScript ne prend en charge que la portée des fonctionsLa
data()
méthode de jQuery est utile et peu connue. Il vous permet de lier des données aux éléments DOM sans modifier le DOM.la source
Filtres d'imbrication
Vous pouvez imbriquer des filtres (comme l' a montré nickf ici ).
la source
Je ne suis vraiment pas fan du
$(document).ready(fn)
raccourci. Bien sûr, cela réduit le code, mais cela réduit également la lisibilité du code. Quand vous voyez$(document).ready(...)
, vous savez ce que vous regardez.$(...)
est utilisé de beaucoup trop de façons pour avoir immédiatement un sens.Si vous avez plusieurs frameworks, vous pouvez utiliser
jQuery.noConflict();
comme vous le dites, mais vous pouvez également lui affecter une variable différente comme ceci:Très utile si vous disposez de plusieurs frameworks qui peuvent être réduits à
$x(...)
des appels de style.la source
Ooooh, n'oublions pas les métadonnées jQuery ! La fonction data () est géniale, mais elle doit être remplie via des appels jQuery.
Au lieu de briser la conformité W3C avec des attributs d'élément personnalisés tels que:
Utilisez plutôt des métadonnées:
la source
data-*
attributs sont automatiquement disponibles via les appels à.data()
Gestionnaires d'événements en direct
Définissez un gestionnaire d'événements pour tout élément qui correspond à un sélecteur, même s'il est ajouté au DOM après le chargement initial de la page:
Cela vous permet de charger du contenu via ajax, ou de les ajouter via javascript et de configurer les gestionnaires d'événements correctement pour ces éléments automatiquement.
De même, pour arrêter la gestion des événements en direct:
Ces gestionnaires d'événements en direct ont quelques limitations par rapport aux événements réguliers, mais ils fonctionnent très bien dans la majorité des cas.
Pour plus d'informations, consultez la documentation jQuery .
MISE À JOUR:
live()
etdie()
sont obsolètes dans jQuery 1.7. Voir http://api.jquery.com/on/ et http://api.jquery.com/off/ pour des fonctionnalités de remplacement similaires.UPDATE2:
live()
est obsolète depuis longtemps, même avant jQuery 1.7. Pour les versions jQuery 1.4.2+ avant 1.7, utilisezdelegate()
etundelegate()
. L'live()
exemple ($('button.someClass').live('click', someFunction);
) peut être réécrite en utilisantdelegate()
comme ça:$(document).delegate('button.someClass', 'click', someFunction);
.la source
Remplacez les fonctions anonymes par des fonctions nommées. Cela remplace vraiment le contexte jQuery, mais il entre plus en jeu, il semble que lorsque vous utilisez jQuery, en raison de sa dépendance à l'égard des fonctions de rappel. Les problèmes que j'ai avec les fonctions anonymes en ligne sont qu'ils sont plus difficiles à déboguer (beaucoup plus faciles à regarder une pile d'appels avec des fonctions distinctes, au lieu de 6 niveaux "anonymes"), et aussi le fait que plusieurs fonctions anonymes au sein de la même La chaîne jQuery peut devenir difficile à lire et / ou à entretenir. De plus, les fonctions anonymes ne sont généralement pas réutilisées; d'autre part, déclarer des fonctions nommées m'encourage à écrire du code plus susceptible d'être réutilisé.
Une illustration; au lieu de:
Je préfère:
la source
this
, vous ne pouvez pas obtenir une OO "correcte" sans utiliser de boîtiers. Je préfère généralement un compromis:$('div').click( function(e) { return self.onClick(e) } );
Définition des propriétés lors de la création de l'élément
Dans jQuery 1.4, vous pouvez utiliser un littéral objet pour définir des propriétés lorsque vous créez un élément:
... Vous pouvez même ajouter des styles:
Voici un lien vers la documentation .
la source
au lieu d'utiliser un alias différent pour l'objet jQuery (lors de l'utilisation de noConflict), j'écris toujours mon code jQuery en enveloppant le tout dans une fermeture. Cela peut être fait dans la fonction document.ready:
vous pouvez également le faire comme ceci:
Je trouve que c'est le plus portable. J'ai travaillé sur un site qui utilise simultanément Prototype ET jQuery et ces techniques ont évité tous les conflits.
la source
instanceOf
ne fonctionnera pas, seulementinstanceof
. Et ça ne marchera pas de toute façon, car çajQuery instanceof jQuery
reviendrafalse
.$ == jQuery
est la bonne façon de le faire.Vérifiez l'index
jQuery a .index mais c'est difficile à utiliser, car vous avez besoin de la liste des éléments, et passez l'élément dont vous voulez l'index:
Ce qui suit est beaucoup plus facile:
Si vous voulez connaître l'index d'un élément dans un ensemble (par exemple des éléments de liste) dans une liste non ordonnée:
la source
index()
et obtenir l'index de son parent.Sténographie pour le prêt-événement
La manière explicite et verbeuse:
La sténographie:
la source
Sur la fonction jQuery principale, spécifiez le paramètre de contexte en plus du paramètre de sélecteur. La spécification du paramètre de contexte permet à jQuery de démarrer à partir d'une branche plus profonde dans le DOM, plutôt qu'à partir de la racine du DOM. Étant donné un DOM suffisamment grand, la spécification du paramètre de contexte devrait se traduire par des gains de performances.
Exemple: recherche toutes les entrées de type radio dans le premier formulaire du document.
Référence: http://docs.jquery.com/Core/jQuery#expressioncontext
la source
$(document.forms[0]).find('input:radio')
fait la même chose. Si vous regardez la source jQuery, vous verrez: si vous passez un deuxième paramètre à$
, il appellera en fait.find()
.$('form:first input:radio')
?Pas vraiment jQuery mais j'ai fait un joli petit bridge pour jQuery et MS AJAX:
C'est vraiment bien si vous faites beaucoup d'ASP.NET AJAX, car jQuery est pris en charge par MS ayant maintenant un joli pont signifie qu'il est vraiment facile de faire des opérations jQuery:
Ainsi, l'exemple ci-dessus n'est pas génial, mais si vous écrivez des contrôles serveur ASP.NET AJAX, il est facile d'avoir jQuery dans votre implémentation de contrôle côté client.
la source
Optimiser les performances des sélecteurs complexes
Interroger un sous-ensemble du DOM lors de l'utilisation de sélecteurs complexes améliore considérablement les performances:
la source
En parlant de trucs et astuces et aussi de quelques tutoriels. J'ai trouvé cette série de tutoriels ( série vidéo «jQuery for Absolute Beginners») par Jeffery Way sont TRÈS UTILES.
Il cible les développeurs qui ne connaissent pas jQuery. Il montre comment créer de nombreuses choses sympas avec jQuery, comme l'animation, la création et la suppression d'éléments et plus encore ...
J'en ai beaucoup appris. Il montre comment il est facile d'utiliser jQuery. Maintenant, je l'adore et je peux lire et comprendre n'importe quel script jQuery même s'il est complexe.
Voici un exemple que j'aime " Redimensionner le texte "
1- jQuery ...
2- Style CSS ...
2- HTML ...
Recommande fortement ces tutoriels ...
http://blog.themeforest.net/screencasts/jquery-for-absolute-beginners-video-series/
la source
Fonction each () asynchrone
Si vous avez des documents vraiment complexes où l'exécution de la fonction jquery each () verrouille le navigateur pendant l'itération, et / ou Internet Explorer affiche le message `` voulez-vous continuer à exécuter ce script '', cette solution sauvera la journée.
La première façon de l'utiliser est comme chaque ():
Un deuxième paramètre facultatif vous permet de spécifier la vitesse / le délai entre les itérations, ce qui peut être utile pour les animations ( l'exemple suivant attend 1 seconde entre les itérations ):
N'oubliez pas qu'étant donné que cela fonctionne de manière asynchrone, vous ne pouvez pas compter sur les itérations pour qu'elles soient terminées avant la ligne de code suivante, par exemple:
J'ai écrit ceci pour un projet interne, et même si je suis sûr qu'il peut être amélioré, cela a fonctionné pour ce dont nous avions besoin, alors j'espère que certains d'entre vous le trouveront utile. Merci -
la source
Syntactic shorthand-sugar-thing - Cache une collection d'objets et exécute des commandes sur une seule ligne:
Au lieu de:
Je fais:
Un cas d'utilisation quelque peu «réel» pourrait être quelque chose dans ce sens:
la source
$(this).siblings().removeClass("hover")
. Je sais que cela ressemble à une si petite chose, mais chaque fois que vous modifiez le DOM, un nouveau rafraîchissement du navigateur peut être déclenché. D'autres possibilités incluent les événements attachés à DOMAttrModified ou les classes modifiant la hauteur de l'élément qui pourraient déclencher d'autres écouteurs d'événements "redimensionner".cache.not(this).removeClass("hover")
J'aime déclarer un
$this
variable au début des fonctions anonymes, donc je sais que je peux référencer un jQueried this.Ainsi:
la source
Enregistrer des objets jQuery dans des variables pour les réutiliser
L'enregistrement d'un objet jQuery dans une variable vous permet de le réutiliser sans avoir à rechercher dans le DOM pour le trouver.
(Comme l'a suggéré @Louis, j'utilise maintenant $ pour indiquer qu'une variable contient un objet jQuery.)
À titre d'exemple plus complexe, supposons que vous ayez une liste d'aliments dans un magasin et que vous souhaitiez n'afficher que ceux qui correspondent aux critères d'un utilisateur. Vous avez un formulaire avec des cases à cocher, chacune contenant un critère. Les cases à cocher ont des noms comme
organic
etlowfat
, et les produits ont des classes correspondantes -.organic
, etc.Vous pouvez maintenant continuer à travailler avec cet objet jQuery. Chaque fois qu'une case est cochée (pour cocher ou décocher), commencez à partir de la liste principale des aliments et filtrez en fonction des cases cochées:
la source
$
devant. par exemplevar $allItems = ...
$
indique qu'il s'agit d'un objet jQuery, ce qui faciliterait la différenciation visuelle des autres variables.Il semble que la plupart des conseils intéressants et importants aient déjà été mentionnés, donc celui-ci n'est qu'un petit ajout.
La petite astuce est la fonction jQuery.each (objet, rappel) . Tout le monde utilise probablement le jQuery.each (rappel) pour itérer sur l'objet jQuery lui-même, car il est naturel. La fonction utilitaire jQuery.each (objet, rappel) parcourt les objets et les tableaux. Pendant longtemps, je ne savais pas en quoi cela pouvait servir en dehors d'une syntaxe différente (cela ne me dérange pas d'écrire toutes les boucles façonnées), et j'ai un peu honte de n'avoir réalisé sa force principale que récemment.
Le fait est que puisque le corps de la boucle dans jQuery.each (objet, rappel) est une fonction , vous obtenez une nouvelle portée à chaque fois dans la boucle, ce qui est particulièrement pratique lorsque vous créez des fermetures dans la boucle.
En d'autres termes, une erreur courante typique est de faire quelque chose comme:
Maintenant, lorsque vous appelez les fonctions du
functions
tableau, vous obtiendrez une alerte trois fois avec le contenuundefined
qui n'est probablement pas ce que vous vouliez. Le problème est qu'il n'y a qu'une seule variablei
et que les trois fermetures s'y réfèrent. Une fois la boucle terminée, la valeur finale dei
est 3 etsomeArrary[3]
estundefined
. Vous pouvez contourner ce problème en appelant une autre fonction qui créerait la fermeture pour vous. Ou vous utilisez l'utilitaire jQuery qui le fera essentiellement pour vous:Maintenant, lorsque vous appelez les fonctions, vous obtenez trois alertes avec le contenu 1, 2 et 3 comme prévu.
En général, ce n'est rien que vous ne pourriez pas faire vous-même, mais c'est agréable à avoir.
la source
Accédez aux fonctions jQuery comme vous le feriez pour un tableau
Ajouter / supprimer une classe basée sur un booléen ...
Est la version courte de ...
Pas autant de cas d'utilisation pour cela. Néanmoins; Je pense que c'est bien :)
Mise à jour
Juste au cas où vous n'êtes pas du type lecture-commentaire, ThiefMaster souligne que le toggleClass accepte une valeur booléenne , qui détermine si une classe doit être ajoutée ou supprimée. Donc, en ce qui concerne mon exemple de code ci-dessus, ce serait la meilleure approche ...
la source
$('selector').toggleClass('name_of_the_class', b);
.Mise à jour:
Incluez simplement ce script sur le site et vous obtiendrez une console Firebug qui apparaîtra pour le débogage dans n'importe quel navigateur. Pas tout à fait aussi complet mais c'est toujours très utile! N'oubliez pas de le retirer lorsque vous avez terminé.
Consultez ce lien:
De CSS Tricks
Mise à jour: j'ai trouvé quelque chose de nouveau; c'est le JQuery Hotbox.
JQuery Hotbox
Google héberge plusieurs bibliothèques JavaScript sur Google Code. Le charger à partir de là économise de la bande passante et il charge rapidement car il a déjà été mis en cache.
Ou
Vous pouvez également l'utiliser pour savoir quand une image est entièrement chargée.
Le "console.info" de firebug, que vous pouvez utiliser pour vider des messages et des variables à l'écran sans avoir à utiliser des boîtes d'alerte. "console.time" vous permet de configurer facilement une minuterie pour envelopper un tas de code et voir combien de temps cela prend.
la source
Utilisez des méthodes de filtrage sur les pseudo-sélecteurs lorsque cela est possible afin que jQuery puisse utiliser querySelectorAll (ce qui est beaucoup plus rapide que sizzle). Considérez ce sélecteur:
La même sélection peut être effectuée en utilisant:
Ce qui doit être plus rapide car la sélection initiale de '.class' est compatible QSA
la source
Supprimer des éléments d'une collection et préserver la chaînabilité
Considérer ce qui suit:
La
filter()
fonction supprime des éléments de l'objet jQuery. Dans ce cas: tous les éléments li ne contenant pas le texte "Un" ou "Deux" seront supprimés.la source
Modification du type d'un élément d'entrée
J'ai rencontré ce problème lorsque j'essayais de changer le type d'un élément d'entrée déjà attaché au DOM. Vous devez cloner l'élément existant, l'insérer avant l'ancien élément, puis supprimer l'ancien élément. Sinon ça ne marche pas:
la source
Utilisation judicieuse de scripts jQuery tiers, tels que la validation de champ de formulaire ou l'analyse d'url. Cela vaut la peine de voir de quoi il s'agit afin que vous sachiez la prochaine fois que vous rencontrez une exigence JavaScript.
la source
Sauts de ligne et chaînabilité
Lors du chaînage de plusieurs appels sur des collections ...
Vous pouvez augmenter la lisibilité avec les sauts de ligne. Comme ça:
la source
Utilisez .stop (true, true) lorsque le déclenchement d'une animation l'empêche de répéter l'animation. Ceci est particulièrement utile pour les animations de survol.
la source
Utiliser des fonctions anonymes auto-exécutables dans un appel de méthode de manière
.append()
à parcourir quelque chose. C'EST À DIRE:Je l'utilise pour parcourir des choses qui seraient grandes et inconfortables pour sortir de mon enchaînement à construire.
la source
Prise en charge des attributs de données HTML5, sur les stéroïdes!
La fonction de données a déjà été mentionnée. Avec lui, vous pouvez associer des données à des éléments DOM.
Récemment, l'équipe jQuery a ajouté la prise en charge des attributs de données * personnalisés HTML5 . Et comme si cela ne suffisait pas; ils ont alimenté la fonction de données avec des stéroïdes, ce qui signifie que vous pouvez stocker des objets complexes sous forme de JSON, directement dans votre balisage.
Le HTML:
Le JavaScript:
la source