In jQuery, filter()
reduziert Ihr Ergebnis auf diejenigen Elemente, die eine bestimmte Bedingung erfüllen.jQuery: Verwenden Sie filter(), aber arbeiten Sie mit beiden Ergebnissen
Dies teilt die Liste in zwei Teile. Arbeiten mit dem „Gut die Hälfte“ der Elemente ist einfach:
$("some selector").filter(function() {
// determine result...
return result;
}).each(/* do something */);
Aber wie kann ich mit der „anderen Hälfte“ Arbeit meiner Elemente, auch - aber ohne das Äquivalent von zu tun dies:
$("some selector").filter(function() {
// determine result...
return !result;
}).each(/* do something else */);
Grundsätzlich möchte ich zwei separate /* do something */
Teile zu einem einzigen Filter füttern. Eine für die, die übereinstimmen und eine für die anderen - ohne zweimal filtern zu müssen. Fehle ich eine jQuery-Funktion, die das tut?
P. S .: Ich denke, was ich tun konnte:
$("some selector").each(function() {
// determine result...
if (result)
/* do something */
else
/* do something else */
});
Aber ich war etwas schöner zu hoffen.
Ich denke, es wird 'each()' sein. – Matt
http://jsfiddle.net/nZtRF/ Eine Sache, die vielleicht bemerkenswert ist, ist, dass mit der 'not()' Methode die Leistung exponentiell abnimmt, wenn die Anzahl der Elemente zunimmt. Für kleinere Mengen ist es trivial. Bei großen Mengen erzielen Sie mit einer 'if()' -Anweisung im Filter eine bessere Leistung. Siehe Test bei jfiddle Link oben, und Unordnung mit Mengen. – user113716
@patrick: Sehr wahr. Das ist ein schwerwiegender Nachteil. : - \ – Tomalak