2010-12-10 13 views
1

Ich habe diesen Code unten ...jquery Array .val()

if (x == 0) { 
      $("#scenariotitle").val(''); 
      $("#scenariosuffix").val(''); 
} 

... der gut arbeitet. Diese Liste wird jedoch auf etwa 5 weitere jQuery-Selects wachsen.

Gibt es eine Möglichkeit, sie in einem Array zu speichern und dann die Funktion .val ('') für alle Elemente im Array zu verwenden? Wenn das möglich ist, wird es effizienter sein? Soll ich sie einfach einzeln auflisten, wenn die Liste nicht größer als 10 ist?

EDIT: Ich habe beschlossen, dies zu nutzen ...

$("#scenariotitle, #scenariosuffix, #scenariosuffix, #scenariosuffix").val(""); 

... weshalb ich die Antwort unten akzeptiert. Jedoch,, gibt es eine sehr gute Diskussion in den Kommentaren und anderen Antworten, wie man einen jquery Array Selector richtig benutzt.

Antwort

7

Sie können mehrere Selektoren in einer Anweisung verketten:

selector #1, selector #2, selector #3 

$("#scenariotitle, #scenariosuffix, #scenariosuffix, #scenariosuffix").val(""); 

Natürlich können Sie ein Array verwenden könnte, aber es ist ganz in diesem Fall sinnlos:

var selectors = [ "selector #1", "selector #2", "selector #n" ]; 
for (var i=0; i<selectors.length; i++) { 
    $(selectors[i]).val(""); 
} 
+3

Noooo, ** ** nie einen 'für ... in'-Schleife über iterieren ein Array, es ist für * Enumeration *. –

+0

@Nick Craver: Es ist * für * welchen Zweck auch immer es verwendet wird. – Orbling

+1

@Orbling - Nein, es ist nicht, 'für (in)' ist für * Enumeration *, eine traditionelle 'for()' Schleife ist für * Iteration * gibt es Unterschiede, bitte nicht die beiden zu verwirren. –

5

Sie die Wähler in einem Array speichern kann , dann kombinieren Sie sie für die Verwendung, wenn Sie wollten, wie folgt:

var selectors = ["#scenariotitle", "#scenariosuffix"]; 
$(selectors.join(", ")).val(""); 

Dies dauert die a Rray dann mit .join() verwandelt es in eine multiple selector (Komma getrennt), um alle Elemente auf einmal zu greifen.

1

Hinzufügen eines zusätzlichen Falles zu dem, was Crozin schrieb (was alles korrekt ist). Wenn Sie die Liste im Laufe der Zeit auffüllen müssen, fügen Sie sie einfach einem jQuery-Objekt hinzu.

+2

Dies wird nicht den gewünschten Effekt haben, '.add()' ändert die Sammlung nicht, sie * gibt eine neue Sammlung mit den hinzugefügten Elementen zurück. In Ihrem obigen Code würde "blankList" in allen Schritten "0" -Elemente enthalten. –

+1

Dies funktioniert gut, wenn Sie einfach den alten Wert von 'blankList' jedes Mal überschreiben, wie in:' blankList = blankList.add ('# scenarioTitle'); ' – user113716

+0

@Nick Craver: Guter Punkt, ein Unterlassungsfehler mache ich a Menge. Korrigiert. – Orbling

2

Crozin hat bereits eine gute Möglichkeit zum Zurücksetzen basierend auf den IDs erwähnt, so dass ich seine Lösung nicht wiederholen werde. Eine andere Option, die Sie berücksichtigen können, wäre die Verwendung eines Klassenselektors.

Wenn Ihr HTML sah wie folgt aus:

<input type='text' name='scenariotitle' class='resettable' /> 
<input type='text' name='scenariosuffix' class='resettable' /> 
<input type='text' name='scenariosomething' class='resettable' /> 
<input type='text' name='scenarioagain' class='resettable' /> 

Dann können Sie diese haben:

$(".resettable").val("");