Was ist die beste Methode zum Hinzufügen von Optionen zu <select>
einem JavaScript-Objekt mithilfe von jQuery?
Ich suche etwas, für das ich kein Plugin brauche, aber ich würde mich auch für die Plugins interessieren, die es gibt.
Das habe ich getan:
selectValues = { "1": "test 1", "2": "test 2" };
for (key in selectValues) {
if (typeof (selectValues[key] == 'string') {
$('#mySelect').append('<option value="' + key + '">' + selectValues[key] + '</option>');
}
}
Eine saubere / einfache Lösung:
Dies ist eine bereinigte und vereinfachte Version von matdumsa :
$.each(selectValues, function(key, value) {
$('#mySelect')
.append($('<option>', { value : key })
.text(value));
});
Änderungen von matdumsa: (1) Das Close-Tag für die Option in append () wurde entfernt und (2) die Eigenschaften / Attribute wurden als zweiter Parameter von append () in eine Map verschoben.
javascript
jquery
arrays
html-select
Darryl Hein
quelle
quelle
value
es sich um eine Zeichenfolge handelt (und fest codiert ist), muss sie nicht in Anführungszeichen gesetzt werden.Antworten:
Das Gleiche wie bei anderen Antworten auf jQuery-Weise:
quelle
$("#mySelect")
eine Variable zuweisen , andernfalls ist das Aufrufen$("#mySelect")
jedes Mal innerhalb der Schleife sehr verschwenderisch, ebenso wie das Aktualisieren des DOM. Siehe Punkte 3 und 6 unter artzstudio.com/2009/04/jquery-performance-rules/…var mySelect = $("#mySelect") outside of the
Nun, Sie könnten einfach jede Schleife machen. Das wäre viel effizienter. Siehe Carls Antwort untenattr
undtext
sind eigentlich Methoden der$('<option/>')
-objectAuf diese Weise "berühren Sie das DOM" nur einmal.
Ich bin nicht sicher, ob die letzte Zeile in $ ('# mySelect'). Html (output.join ('')) konvertiert werden kann, da ich keine jQuery-Interna kenne (möglicherweise wird etwas in html () analysiert. Methode)quelle
key
einige Anführungszeichen hat oder>, <
drin ist.Dies ist etwas schneller und sauberer.
quelle
jQuery
Vanille JavaScript
quelle
Option
Objekt gehört. Ist das in allen Browsern eingebaut?new Option
, aber festgestellt, dass es in IE6 und 7 nicht funktioniert hat. Ich habe keinen Grund dafür, aber viele der vollständigen jQuery-Optionen haben funktioniert.new Option('display', value, true)
new Option('display', value, true, true)
( javascriptkit.com/jsref/select.shtml )Wenn Sie keine alten IE-Versionen unterstützen müssen, ist die Verwendung des
Option
Konstruktors eindeutig der richtige Weg, eine lesbare und effiziente Lösung :Es ist in der Funktionalität gleichwertig, aber sauberer als:
quelle
Dies sieht besser aus, bietet Lesbarkeit, ist jedoch langsamer als andere Methoden.
Wenn Sie Geschwindigkeit wünschen, ist dies der schnellste (getestete!) Weg, indem Sie ein Array und keine Zeichenfolgenverkettung verwenden und nur einen Append-Aufruf verwenden.
quelle
Eine Verfeinerung der Antwort älterer @ joshperry :
Es scheint, dass einfaches .append auch wie erwartet funktioniert,
oder kürzer,
quelle
$.weakmap
, um zuGC
map()
Konstrukt angemessen , kombiniert mit der Eigenschaftappend()
, eine Reihe von Objekten korrekt hinzuzufügen!Alle diese Antworten scheinen unnötig kompliziert zu sein. Alles was Sie brauchen ist:
Das ist völlig browserübergreifend kompatibel.
quelle
new Option(value, key);
? Die Parameterreihenfolge lautet Optionen (text_visible_part, value_behind_the_scenes).Seien Sie gewarnt ... Ich verwende jQuery Mobile 1.0b2 mit PhoneGap 1.0.0 auf einem Android 2.2-Telefon (Cyanogen 7.0.1) (T-Mobile G2) und konnte die .append () -Methode überhaupt nicht zum Laufen bringen. Ich musste .html () wie folgt verwenden:
quelle
Ich habe ein paar Tests gemacht und das macht, glaube ich, den Job am schnellsten. : P.
quelle
Es gibt einen Ansatz, der den Microsoft Templating-Ansatz verwendet , der derzeit zur Aufnahme in den jQuery-Kern vorgeschlagen wird. Die Verwendung der Vorlage bietet mehr Leistung, sodass sie für das einfachste Szenario möglicherweise nicht die beste Option ist. Weitere Informationen finden Sie in Scott Gu's Beitrag, in dem die Funktionen beschrieben werden.
Fügen Sie zunächst die Template-js-Datei hinzu, die bei github erhältlich ist .
Richten Sie als Nächstes eine Vorlage ein
Rufen Sie dann mit Ihren Daten die Methode .render () auf
Ich habe diesen Ansatz detaillierter gebloggt .
quelle
Ich habe so etwas gemacht und ein Dropdown-Element über Ajax geladen . Die obige Antwort ist ebenfalls akzeptabel, aber es ist immer gut, so wenig DOM-Änderungen wie möglich vorzunehmen, um eine bessere Leistung zu erzielen.
Anstatt jedes Element in einer Schleife hinzuzufügen, ist es besser, Elemente in einer Schleife zu sammeln und anzuhängen, sobald es abgeschlossen ist.
Fügen Sie es hinzu,
oder noch besser
quelle
Der einfache Weg ist:
quelle
Die meisten anderen Antworten verwenden die
each
Funktion, um über die zu iterierenselectValues
. Dies erfordert, dass für jedes Element ein Anhang aufgerufen wird und ein Reflow ausgelöst wird, wenn jedes einzeln hinzugefügt wird.Das Aktualisieren dieser Antwort auf eine idiomatischere Funktionsmethode (unter Verwendung moderner JS) kann so formuliert werden, dass sie
append
nur einmal aufgerufen wird , wobei ein Array vonoption
Elementen mit map und einemOption
Elementkonstruktor erstellt wird.Die Verwendung eines
Option
DOM-Elements sollte den Aufwand für Funktionsaufrufe verringern, da dasoption
Element nach der Erstellung nicht aktualisiert werden muss und die Parsing-Logik von jQuery nicht ausgeführt werden muss.Dies kann weiter vereinfacht werden, wenn Sie eine Factory Utility-Funktion erstellen, mit der ein Optionsobjekt neu erstellt wird:
Dann kann dies direkt bereitgestellt werden an
map
:Vorherige Formulierung
Da
append
können auch Werte als variable Anzahl von Argumenten geben, können wir die Liste der vorab erstellenoption
Elemente abzubilden und hängen Sie sie als Argumente in einem einzigen Anruf unter Verwendungapply
.Es sieht so aus, als würde in späteren Versionen von jQuery
append
auch ein Array-Argument akzeptiert und dies kann etwas vereinfacht werden:quelle
Es funktioniert gut mit jQuery 1.4.1.
Ein vollständiger Artikel zur Verwendung dynamischer Listen mit ASP.NET MVC & jQuery finden Sie unter:
Dynamische Auswahllisten mit MVC und jQuery
quelle
Es gibt ein Sortierproblem mit dieser Lösung in Chrome (jQuery 1.7.1) (Chrome sortiert Objekteigenschaften nach Name / Nummer?). Um die Reihenfolge beizubehalten (ja, es ist Objektmissbrauch), habe ich Folgendes geändert:
dazu
und dann sieht das $ .each so aus:
quelle
Anstatt überall denselben Code zu wiederholen, würde ich vorschlagen, dass es wünschenswerter ist, eine eigene jQuery-Funktion zu schreiben, wie:
Um eine Option hinzuzufügen, gehen Sie wie folgt vor:
quelle
Sie können einfach mit dem folgenden Code über Ihr JSON-Array iterieren
$('<option/>').attr("value","someValue").text("Option1").appendTo("#my-select-id");
quelle
Obwohl die vorherigen Antworten alle gültige Antworten sind, kann es ratsam sein, alle diese Antworten zuerst an ein documentFragmnet anzuhängen und dann das Dokumentfragment als Element nach ...
Sehen Sie John Resigs Gedanken zu diesem Thema ...
Etwas in der Art von:
quelle
$.each
ist langsamer als afor
Schleife$("#mySelect").append();
Die beste Lösung ist also die folgende
Wenn JSON-Daten
resp
sindbenutze es als
quelle
Noch eine andere Art, es zu tun:
quelle
$('#mySelect')
befolgt, die Antwort von @rocktheroad zwischenzuspeichern und dann zu überarbeiten ... was auch immer, dies ist die praktischere LösungDies manipuliert das DOM nur einmal, nachdem zuerst eine riesige Zeichenfolge erstellt wurde.
quelle
$("#myselect").empty().append(opts);
durchgetElementById('myselect').innerHtml = opts;
Das habe ich mit zweidimensionalen Arrays gemacht: Die erste Spalte ist Item i, add to
innerHTML
the<option>
. Die zweite Säule ist RECORD_ID i, addieren ,value
der<option>
:PHP
JavaScript / Ajax
quelle
Ein jQuery-Plugin finden Sie hier: Automatisches Ausfüllen von Auswahlfeldern mit jQuery & AJAX .
quelle
Ich fand, dass dies einfach ist und großartig funktioniert.
quelle
Das JSON-Format:
Und der jQuery-Code zum Auffüllen der Werte für den Dropdown-Erfolg von Ajax:
quelle
Mit der Funktion $ .map () können Sie dies auf elegantere Weise tun:
quelle
quelle
Stellen Sie Ihre HTML-Auswahl-ID in die folgende Zeile ein. Hier
mySelect
wird als ID des Auswahlelements verwendet.Rufen Sie dann das Objekt ab, das in diesem Szenario die selectValues ist, und setzen Sie es für jede Schleife auf die jquery. Der Wert und der Text der Objekte werden entsprechend verwendet und wie folgt an die Optionsauswahl angehängt.
Dies zeigt Text als Optionsliste an, wenn die Dropdown-Liste ausgewählt ist und sobald ein Text ausgewählt ist, wird der Wert des ausgewählten Textes verwendet.
Z.B.
"1": "Test 1", "2": "Test 2",
Dropdown-Liste,
Anzeigename: Test 1 -> Wert ist 1 Anzeigename: Test 2 -> Wert ist 2
quelle
Um die Leistung zu verbessern, ist es besser, die Optionsliste separat zu erstellen und an die Auswahl der ID anzuhängen.
http://learn.jquery.com/performance/append-outside-loop/
quelle