utiliser les fonctions de la liste underscore.js sur la collecte d'objets jquery
-
26-10-2019 - |
Question
Je suis en contact avec une application qui utilise à la fois jQuery et underscore.js. Je voudrais pouvoir utiliser certaines fonctions de iterator de underscore, comme any()
et all()
sur une collection d'objets jQuery. Y a-t-il un moyen de faire cela? Je voudrais faire quelque chose de semblable à ce qui suit:
checkboxes = $("input[type=checkbox]");
_.filter(checkboxes, function(box) {
return box.is(":checked");
});
mais cela renvoie une erreur:
Uncaught TypeError: Object #<HTMLInputElement> has no method 'is'
Je suppose donc encadré dans ce contexte est de ne pas agir comme un objet jQuery.
La solution
Vous devez envelopper box
dans jQuery:
checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
return $(box).is(":checked");
});
En outre, au lieu de créer un nouvel objet pour chaque élément de la collection, vous pouvez simplement utiliser la box.checked
native:
checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
return box.checked;
});
Sur une note latérale: jQuery a sa propre méthode de filtre :
checkboxes = $("input[type=checkbox]").filter(function() {
return $(this).is(":checked");
});
Par ailleurs, dans votre exemple - êtes-vous sûr que vous avez à filtre? Vous pouvez tout aussi bien utiliser que votre sélecteur:
checkboxes = $("input[type=checkbox]:checked")
Autres conseils
Ici box
est un objet de type HTMLInputElement
. Son pas un objet jQuery. Comme .is
est une méthode d'objet jQuery, vous avez besoin de jQuery objet box
.
Il peut être simplement fait par, $(box)
. Appliquer ensuite .is()
.
$(box).is(":checked");