J'utilise jQuery pour ajouter des événements aux éléments DOM. En faisant ceci, j'utilise souvent des sélecteurs qui pourraient techniquement rassembler une liste d'articles assortis plutôt qu'un seul. par exemple. en utilisant les méthodes .children()
et .find()
, j'ai pu trouver 0, 1 ou plusieurs éléments DOM correspondants. Est-ce que je dois simplement vérifier .size() == 1
sur chaque élément que j'attache des événements, ou est-ce qu'il y a une manière plus simple de faire ceci, par exemple. un sélecteur avec une colonne de correspondances attendues qui échoue si ce nombre attendu n'est pas égal à la taille? Il semble stupide, je suppose, étant donné que je produis également le HTML et devrait connaître la bonne réponse, mais j'ai beaucoup de manipulations DOM en cours et je me demandais s'il y a un mécanisme de vérification de la santé intégré ou non.Comment vérifier la page DOM lors de l'association d'événements jQuery/javascript à des éléments?
Répondre
Vous pouvez écrire une méthode simple d'extension pour faire ce que vous voulez, comme ceci:
jQuery.fn.ifCount = function(count) {
return this.length === count ? this : $();
};
Puis dans votre code au lieu d'un if
chaque fois, vous pouvez simplement appeler cela dans la chaîne, par exemple:
$("div").ifCount(2).css({ color: 'red' });
Si le compte est 2, l'ensemble s'exerce et .css()
fonctionne sur les éléments. Si le compte est tout sauf 2, un nouveau vide est retourné, donc le .css()
ne fonctionne sur rien.
Si vous voulez lier simplement à un certain nombre d'éléments et ne se soucient pas combien, il n'est pas nécessaire de vérifier quoi que ce soit, vous pouvez simplement faire:
$("div").click(function() { .... });
Cela fonctionne s'il y a 0, 1 ou 400 <div>
éléments, cela n'a pas d'importance.Le comportement par défaut de jQuery est de simplement continuer la chaîne avec les éléments correspondants ... s'il y a 0 les fonctions de la chaîne ne s'exécutent simplement sur aucun élément, mais ne lance pas une erreur. Ce n'est pas spécifique aux gestionnaires d'événements, cela fonctionne avec n'importe quel code jQuery (et les plugins écrits correctement).
Vous n'avez pas besoin de les vérifier. Utilisez simplement la méthode et appelez bind. Si elle retourne un ou plusieurs éléments tous les éléments auront l'événement lié. S'il ne renvoie aucun élément, il ne lancera aucune erreur non plus.
Vous pouvez placer la sélection dans une variable locale puis tester la taille:
var items = $(".items");
if (items.length == 1) {
// Do you regular stuff here
} else if (items.length > 1) {
// Log error to the console
// Example: console.log('Too Many Items!!'); <- with firebug ofcourse
} else {
// console.log("Too Few Items");
}
Vous pouvez enregistrer l'erreur sur la console mais corriger le problème pour excution plus de code en faisant ceci:
console.log('Too Many Items!!');
items = items.first();
Je pense que vous devriez concevoir un sélecteur pour répondre à vos besoins. Si l'objectif est de choisir un élément - utilisez le sélecteur d'identifiant ou ceux qui renvoient un élément ou zéro $ ("#"). Cliquez sur (function_callback), si vous en avez besoin, utilisez d'autres sélecteurs. Quoi qu'il en soit, lorsque vous attachez des événements de manière jQuery $ ("") .clic (ou un autre événement), vous déclarez que tous les éléments qui correspondent à la condition du sélecteur sont souscrits à l'événement.
Généralement, vous pouvez appliquer des fonctions à la fois: $ ("..."). Someting();
Vous pouvez aussi essayer: $ ("...") chaque (function() {$ (ce) .quelquechose();} );.
- 1. jQuery: difficultés à insérer des éléments DOM
- 2. Obtenir des éléments DOM dans une zone rectangle d'une page
- 3. Suppression des propriétés des éléments DOM
- 4. Javascript - comment changer le contenu des éléments dans une page lors de l'utilisation iframes, en utilisant dom, pas jquery
- 5. Accélération des fonctions jQuery empty() ou replaceWith() lors de la gestion de grands éléments DOM
- 6. Réorganiser l'ordre des éléments DOM lors de l'utilisation de jQuery each()
- 7. Réorganisation des éléments de la page - JQuery
- 8. Comment ajouter des éléments html à une page non html
- 9. Besoin d'aide pour accéder à des éléments DOM PHP
- 10. Comment manipuler la page Web du DOM de l'applet?
- 11. Comment attacher des gestionnaires d'événements à des éléments DOM générés dynamiquement à l'aide de jQuery?
- 12. Comment puis-je accéder à la page contextuelle DOM à partir de la page bg dans l'extension Chrome?
- 13. Comment vérifier le titre de la page
- 14. Comment accéder aux valeurs des éléments imbriqués dans le DOM?
- 15. Comment je traverserais des éléments entre deux éléments connus dans le dom en utilisant jquery?
- 16. Comment vérifier TR1 lors de la compilation?
- 17. Est-il possible de désactiver certains éléments DOM lors de la capture d'événements de souris?
- 18. IE8 Refus d'appliquer des stylesheet aux éléments créés par dom
- 19. Passe GeckoFX éléments DOM à la navigation JavaScript appelle
- 20. Comment accéder aux éléments DOM mxml (Flex)?
- 21. jQuery Ajax - ajouter de nouveaux éléments à DOM
- 22. Comment obtenir les coordonnées de l'écran des éléments de la page Web dans BHO
- 23. référencement éléments DOM dans jQuery
- 24. Stocker des éléments de référence DOM dans un tableau Javascript
- 25. Accès aux éléments DOM sans ID
- 26. Userscript, identifiez quand des éléments sont ajoutés à la page (via des événements?)
- 27. Dupliquer des éléments lors de l'ajout de XElement à XDocument
- 28. Performances jQuery lors de la sélection de plusieurs éléments
- 29. Meilleure façon d'ajouter des éléments DOM avec jQuery
- 30. Comment ajouter de nouveaux éléments à XML en utilisant PHP DOM plus profond que la racine?
Si vous attendez un élément et vous en obtenez deux si le code se comporte différemment? Ou voulez-vous juste attacher à l'un des éléments? –
Eh bien, en théorie, il ne devrait jamais y avoir une seule correspondance, mais dans le cas où la page DOM a été foutu par un bug dans mon autre code, je voudrais éviter d'attacher des événements à des collections d'éléments - préfèrent un page non fonctionnelle à partir d'un point de vue javascript dans ce cas. –