2012-10-16 17 views
8
  1. Tun diese beiden Codefragmente identische Dinge? Wenn ja, wann sollte man gegenüber dem anderen verwendet werden? (Außer, wenn Sie etwas tun müssen Beteiligung i oder value)jquery selector looping vs using-Funktion jeder

    $("foo").each(function(i,value) { 
        $(this).empty(); 
    }); 
    

    gegen

    $("foo").empty(); 
    
  2. Im Allgemeinen kann man davon ausgehen, dass $("foo").someMethod() bedeutet „laufen somemethod() auf jedes Element, das die Streichhölzer Selektor, außer wenn der Name der Methode each ist (dh jedes ist ein Sonderfall)

+1

Wenn Sie don‘ t brauchen Sie den Index des Elements, das Sie leeren, es besteht keine Notwendigkeit, ein 'each() zu verwenden 'Befehl. Geh mit der kürzeren Syntax. – Lix

+1

@Lix: es läuft auch schneller: http://jsperf.com/jquery-selector-looping-vs-using-function-each – RASG

Antwort

4

Angenommen, Sie beziehen sich auf jQuery-Funktionen, ja, die beiden Codefragmente sind identisch.

Sie sollten die each() Funktion entweder verwenden, wenn Sie mit dem Index arbeiten möchten, oder um eine lange Funktionskette zu verhindern.

Ihr Verständnis von $('foo').someMethod() gilt für jQuery-Methoden. Aber seien Sie gewarnt, einige Plugins können den Selektor auf andere Weise behandeln oder nur das erste angepasste Element zum Beispiel beeinflussen.

+0

Könnten Sie näher erläutern, wie ein Plugin den jquery-Selektor auf diese Weise "verschmutzt"? (wenn Sie sich auf $ ('') bezogen haben) – wal

+0

Der Selektor wird nicht als solcher "verschmutzt", aber das Plugin ist möglicherweise nur in der Lage, beispielsweise das erste gematchte Element zu handhaben. – BenM

3

Ja, die meisten jQuery-Funktionen sind so aufgebaut.

Betrachten Sie das Codebeispiel:

$.fn.someMethod = function() { 
    return this.each(function() { 
     do_something(this); 
    }); 
}; 

Also selbst konnte man .each wieder verwenden, sollten Sie nur verwenden:

$(selector).someMethod();

nicht

$(selector).each(function() { 
    $(this).someMethod(); 
}); 
+0

meine aktuelle jquery noob-ness versteht die Bedeutung nicht. Können Sie bitte den '$ .fn.someMethod' Teil erklären. – wal

+0

@wal Das bedeutet, setzen Sie die Methode auf den Prototyp von jQuery. Sie könnten einige Artikel überprüfen, wie man ein jQuery-Plugin erstellt. – xdazz