La cosa bella delle chiamate concatenabili con jQuery è che quando non ci sono corrispondenze, non accadrà nulla di male.
Quando si chiama .filter
e zero partite sono stati ceduto, si sono esecuzione delle chiamate di metodo in seguito incatenati, per definizione, perché vengono richiamati direttamente sul oggetto restituito (che è quello che è il concatenamento).
Quando non ci sono corrispondenze, JavaScript invocherà ancora ogni metodo successivamente concatenato su ciascun oggetto restituito. La quantità di elaborazione sprecata dipende da come è stato implementato il metodo specifico.
$.fn.doesItTryToDoStuff = function() {
alert('called');
// here I could have some wasteful process
// which could foolishly be executed
// even when there are no elements
return this.each(function() {
$(this).css("border", "1px solid red");
});
};
$("input").filter("[value='foo']").doesItTryToDoStuff().doesItTryToDoStuff();
Demo.
mi aspetterei che la maggior parte i metodi di jQuery sono codificate in modo tale che nulla drastica avviene prima la lunghezza della collezione è stato testato, ma non si sa mai.
Contrassegnare questo come la risposta accettata in quanto riguarda l'efficienza che è in realtà la mia domanda. – weenoid