Idiomatische jQuery um alle Optionen in einem Listenfeld in einen durch Kommas getrennten string?
Wo lb ist eine listbox, txtfield ist eine textbox diesen code nimmt alle Werte der Optionen, setzt Sie in ein array und lässt Sie in eine Komma-separierte Liste:
var arr = [];
for (var i = 0; i < lb.length; i++) {
arr[i] = lb.options[i].value;
}
txtfield.value = arr.join(',');
lb.Optionen.toString() offenbar nicht funktioniert, weil es ein array von Optionen (Wert und text). Ich habe nicht gefunden was mehr succint als diese.
Was ist der jQuery-Weg, dies zu tun? Ich habe versucht, Herumspielen mit $(lb).each()
, aber kann nicht scheinen, um es zu arbeiten in der gleichen Weise.
- mögliche Duplikate von Wie man alle Optionen eines select-mithilfe von Jquery?
- kein Duplikat, denn ich bin mit dem $(domelement) da ich schon ein DOM-element.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese verwendet
.map()
erstellen Sie ein jQuery-Objekt durch Rücksendung dervalue
jederoption
, dann verwendet.get()
zu extrahieren, die das Array aus dem Objekt.EDIT: Als @Nick Craver bemerkt in dem Kommentar unten, wenn Sie brauchen, um optimale Leistung (mit jQuery), macht es mehr Sinn,die
$.map()
- Variante, da Sie bereits eine Sammlung. Siehe seine Antwort für details.EDIT: um bessere Leistung Zu erhalten, machen Sie Ihre
for
Schleife, aber cache die Verweise auf die Eigenschaften. Es einen Unterschied macht.jQuery.map()
die viel weniger verschwenderisch/schneller, Sie können es hier testen: jsperf.com/map-vs-jquery-mapDer jQuery-version ist
.map()
wie diese:Oder ein bisschen schneller mit
$.map()
wie diese:Allerdings sind beide deutlich weniger effizient als ein
for
loop, gehen Sie mit dem einfachen JavaScript-version, die Sie bereits haben.Blick auf
map()
..Dies ist die jQuery-äquivalent zu dem code. Es gibt elegantere Lösungen, aber.
Könnte es so machen, aber ich bin mir nicht sicher, was Sie zu erreichen versuchen?
Siehe demo hier: Fiddler Demo
können Sie die mehrere ausgewählte option Text-Werte mit Trennzeichen.
JS:
HTML: