Wie erhalte ich mit jQuery alle Optionen einer Auswahl?


Antworten:


612

Verwenden:

$("#id option").each(function()
{
    // Add $(this).val() to your list
});

.each () | jQuery API-Dokumentation


63
Keine der JavaScript-Operationen erfordert jQuery. jQuery ist eine Frage der Wahl, um JS-Operationen zu vereinfachen.
Ruuter

8
Sie können auch Folgendes tun: $ ("# id option"). each (function (name, val) {var opt = val.text;});
Kofifus

3
$.mapist viel eleganter und weniger fehleranfällig (siehe unten).
Elliot Cameron

1
$('#id option').map((index, option) => option.value): Beachten Sie, wie die Rückrufsignatur im Vergleich zur "Vanille" JS- mapFunktion ( (item, index) =>)
umgekehrt wird

168

Ich kenne jQuery nicht, aber ich weiß, dass wenn Sie das select-Element erhalten, es ein 'options'-Objekt enthält.

var myOpts = document.getElementById('yourselect').options;
alert(myOpts[0].value) //=> Value of the first option

74
+1. Verwenden Sie nicht die komplexe Auswahlmagie von jQuery für Dinge, die bereits recht effiziente Implementierungen in das einfache alte DOM integriert haben.
Bobince

19
Warum nicht, @bobince? Wenn Sie meistens jQuery verwenden, ist es schneller, wenn weniger Code geschrieben werden muss, und schneller, nicht herauszufinden, ob Sie in diesem Fall zu normalem Javascript wechseln sollten. Und Ihr Code ist konsistenter.
Andrew

138

$.map ist wahrscheinlich der effizienteste Weg, dies zu tun.

var options = $('#selectBox option');

var values = $.map(options ,function(option) {
    return option.value;
});

Sie können Änderungsoptionen hinzufügen, $('#selectBox option:selected')wenn Sie nur die ausgewählten Optionen möchten.

In der ersten Zeile werden alle Kontrollkästchen aktiviert und das jQuery-Element in eine Variable eingefügt. Wir verwenden dann die .mapFunktion von jQuery, um eine Funktion auf jedes der Elemente dieser Variablen anzuwenden. Alles, was wir tun, ist, den Wert jedes Elements zurückzugeben, da dies alles ist, was uns wichtig ist. Da wir sie innerhalb der Kartenfunktion zurückgeben, wird tatsächlich ein Array der Werte wie angefordert erstellt.


3
Dies ist die eleganteste Lösung IMO. Map ist ein sehr leistungsfähiges Konstrukt, das genau in diese Situation passt.
Hazerd

1
Ihre Lösung gefällt mir sehr gut - es ist der Ansatz, den ich gewählt habe. Wenn Sie jedoch nur die ausgewählten Werte möchten, ist dies noch trivialer: $('#selectBox').val()Gibt ein Array der ausgewählten Werte zurück.
whoisthemachine

Hallo, @PCasagrande Ich habe einen benutzerdefinierten Attributnamen 'Datentyp'. Wie kann ich mit Ihrer Lösung den Wert davon ermitteln? Was ich tue, ist 'option.data-type', aber das gibt mir NaN. Danke im Voraus.
Me_developer

Hallo, @PCasagrande Ich habe das bekommen, was ich brauchte, indem ich '$ (Option, dies) .attr ("Datentyp")' gemacht habe. Aber wenn Sie etwas Besseres haben, lassen Sie es mich wissen. Vielen Dank. :)
Me_developer

Ich denke, Sie können einfach 'return option.attr ("Datentyp");' in der Karte. Das sollte Ihnen ein Array der Werte der Datentypen geben.
PCasagrande

74

Einige Antworten verwenden each, ist aber mapmeiner Meinung nach eine bessere Alternative:

$("select#example option").map(function() {return $(this).val();}).get();

mapIn jQuery gibt es (mindestens) zwei Funktionen. Die Antwort von Thomas Petersen verwendet "Utilities / jQuery.map"; Diese Antwort verwendet "Traversing / Map" (und daher einen etwas saubereren Code).

Es hängt davon ab, was Sie mit den Werten machen werden. Wenn Sie beispielsweise die Werte einer Funktion zurückgeben möchten, mapist dies wahrscheinlich die bessere Alternative. Aber wenn Sie die Werte direkt verwenden möchten, möchten Sie wahrscheinlich each.


4
Sie können hier tatsächlich this.value anstelle von $ (this) .val () verwenden. Sie sind auch besser bedient, wenn Sie die Kinder in der anfänglichen Auswahl finden (Option #example). Schön hart mit dem get () am Ende.
Alex Barrett

1
@ Alex Barret: Nun, es ist möglich, dieses Problem zu lösen, ohne jQuery zu verwenden. Wenn Sie jQuery mit einem Element als Argument aufrufen, wird das Element einfach in ein jQuery-Objekt eingeschlossen (dh kein Baumdurchlauf, dh nicht so teuer). Also vielleicht als Mikrooptimierung ja.
Cic

Karte FTW. Genau so sollte es gemacht werden. Das get () am Ende scheint jedoch unnötig (das gibt den DOM-Knoten zurück und val () gibt uns bereits eine Zeichenfolge, also ...?) Var opts = $ ('# cm_amt option'). Map (function ( ) {return parseInt ($ (this) .val ());});
Beam

3
@sbeam: "Da der Rückgabewert ein von jQuery umschlossenes Array ist, arbeitet get()das zurückgegebene Objekt häufig mit einem Basisarray." - api.jquery.com/map
cic

Es hat mir sehr geholfen, ich wollte den Text nicht den Wert, also habe ich text()stattdessen einfach gewechselt val(). Vielen Dank ! (Ich habe Sie veranlasst, über die 1000 zu gehen ;->)
ParPar

52
$('select#id').find('option').each(function() {
    alert($(this).val());
});

1
Dies ist das Ticket, da ich Elemente auf init lieber in Variablen zwischenspeichern möchte, als den Selektor zu verwenden.
Doug Beard

1
Funktioniert auch mit $ (this) (was gesucht wurde) zB
Hugh Seagraves

16
$("#id option").each(function()
{
    $(this).prop('selected', true);
});

Die richtige Methode besteht jedoch darin, die DOM-Eigenschaft des Elements wie folgt festzulegen :

$("#id option").each(function(){
    $(this).attr('selected', true);
});

4
Wäre es nicht .attr ('ausgewählt', 'ausgewählt')?
v010dya

16

Dadurch werden die Optionswerte von #myselectboxin ein schönes, sauberes Array für Sie eingefügt:

// First, get the elements into a list
var domelts = $('#myselectbox option');

// Next, translate that into an array of just the values
var values = $.map(domelts, function(elt, i) { return $(elt).val();});

Sie können dies verkürzen auf: $.map(domelts, elt=> $(elt).val())
Jonno_FTW

11

Sie können alle Ihre "ausgewählten Werte" anhand des Namens der Kontrollkästchen nehmen und sie in einem durch "," getrennten Stich darstellen.

Eine gute Möglichkeit, dies zu tun, ist die Verwendung von $ .map () von jQuery:

var selected_val = $.map($("input[name='d_name']:checked"), function(a)
    {
        return a.value;
    }).join(',');

alert(selected_val);

6
Dieser Code ist ziemlich unlesbar, ich würde ihn nie benutzen, selbst wenn er irgendwie cool ist.
Klicken Sie auf Upvote

7
Auch bei der Frage geht es um selectund optionnicht um Kontrollkästchen.
Dementic


3

Sie können dafür folgenden Code verwenden:

var assignedRoleId = new Array();
$('#RolesListAssigned option').each(function(){
    assignedRoleId.push(this.value);
});

2

Für Mehrfachauswahloption:

$('#test').val()Gibt eine Liste der ausgewählten Werte zurück. $('#test option').lengthGibt die Gesamtzahl der Optionen zurück (sowohl ausgewählt als auch nicht ausgewählt).


1

Dies ist ein einfaches Skript mit jQuery:

var items = $("#IDSELECT > option").map(function() {
    var opt = {};
    opt[$(this).val()] = $(this).text();
    return opt;
}).get();
var selectvalues = [];

for(var i = 0; i < items.length; i++) {
    for(key in items[i]) {


        var id = key;
        var text = items[i][key];

        item = {}
        item ["id"] = id;
        item ["text"] = text;

        selectvalues.push(item);

    }
}
console.log(selectvalues);
copy(selectvalues);
<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

1

Hier ist ein einfaches Beispiel in jquery, um alle Werte, Texte oder Werte des ausgewählten Elements oder den Text des ausgewählten Elements abzurufen

$('#nCS1 > option').each((index, obj) => {
   console.log($(obj).val());
})

printOptionValues = () => {

  $('#nCS1 > option').each((index, obj) => {
    console.log($(obj).val());
  })

}

printOptionTexts = () => {
  $('#nCS1 > option').each((index, obj) => {
    console.log($(obj).text());
  })
}

printSelectedItemText = () => {
  console.log($('#nCS1 option:selected').text());
}

printSelectedItemValue = () => {
  console.log($('#nCS1 option:selected').val());
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select size="1" id="nCS1" name="nCS1" class="form-control" >
					<option value="22">Australia</option>
          <option value="23">Brunei</option>
          <option value="33">Cambodia</option>
          <option value="32">Canada</option>
          <option value="27">Dubai</option>
          <option value="28">Indonesia</option>
          <option value="25">Malaysia</option>				
</select>
<br/>
<input type='button' onclick='printOptionValues()' value='print option values' />
<br/>
<input type='button' onclick='printOptionTexts()' value='print option texts' />
<br/>
<input type='button' onclick='printSelectedItemText()' value='print selected option text'/>
<br/>
<input type='button' onclick='printSelectedItemValue()' value='print selected option value' />


0
$("input[type=checkbox][checked]").serializeArray();

Oder:

$(".some_class[type=checkbox][checked]").serializeArray();

Um die Ergebnisse zu sehen:

alert($("input[type=checkbox][checked]").serializeArray().toSource());

0

Wenn Sie nach allen Optionen mit ausgewähltem Text suchen, funktioniert der folgende Code.

$('#test').find("select option:contains('B')").filter(":selected");

0

Der kurze Weg

$(() => {
$('#myselect option').each((index, data) => {
    console.log(data.attributes.value.value)
})})

oder

export function GetSelectValues(id) {
const mData = document.getElementById(id);
let arry = [];
for (let index = 0; index < mData.children.length; index++) {
    arry.push(mData.children[index].value);
}
return arry;}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.