Frage

Ich arbeite mit einer App, die sowohl jQuery als auch unterstriche.js verwendet. Ich möchte in der Lage sein, einige der Iteratorfunktionen von Unterstrichen zu verwenden, wie z. any() und all() über eine Sammlung von JQuery -Objekten. Gibt es eine Möglichkeit, dies zu tun? Ich würde gerne etwas Ähnliches wie folgt tun:

checkboxes = $("input[type=checkbox]");
_.filter(checkboxes, function(box) {
    return box.is(":checked");
});

Dies wirft jedoch einen Fehler aus:

Uncaught TypeError: Object #<HTMLInputElement> has no method 'is'

Ich gehe also davon aus, dass Box in diesem Zusammenhang nicht wie ein JQuery -Objekt handelt.

War es hilfreich?

Lösung

Du musst wickeln box in jQuery:

checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
    return $(box).is(":checked");
});

Anstatt für jedes einzelne Element in der Sammlung ein neues Objekt zu erstellen, konnten Sie nur den Native verwenden box.checked:

checkboxes = $("input[type=checkbox]");
checkboxes = _.filter(checkboxes, function(box) {
    return box.checked;
});

Als Randnotiz: JQuery hat eine eigene Filtermethode:

checkboxes = $("input[type=checkbox]").filter(function() {
    return $(this).is(":checked");
});

Darüber hinaus müssen Sie in Ihrem Beispiel sicherstellen, dass Sie filtern müssen? Sie könnten das genauso leicht wie Ihren Selektor verwenden:

checkboxes = $("input[type=checkbox]:checked")

Andere Tipps

Hier box ist ein HTMLInputElement Geben Sie Objekt ein. Es ist kein JQuery -Objekt. Wie .is ist eine jQuery -Objektmethode, Sie benötigen JQuery -Objekt von box.

Es kann nur gemacht werden von, $(box). Dann bewerben .is().

$(box).is(":checked");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top