Jak uzyskać wszystkie opcje zaznaczenia za pomocą jQuery?

406

Jak mogę uzyskać wszystkie opcje wyboru poprzez jQuery, przekazując jego identyfikator?

Szukam tylko ich wartości, a nie tekstu.

Kliknij opcję Upvote
źródło

Odpowiedzi:

612

Posługiwać się:

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

.each () | Dokumentacja API jQuery

ybo
źródło
63
Żadna z operacji JavaScript nie wymaga jQuery. jQuery jest kwestią wyboru, aby uprościć operacje JS.
ruuter
8
możesz także zrobić: $ („# id opcja”). each (function (name, val) {var opt = val.text;});
kofifus
3
$.mapjest znacznie bardziej elegancki i mniej podatny na błędy (patrz poniżej).
Elliot Cameron
1
$('#id option').map((index, option) => option.value): zwróć uwagę, jak sygnatura wywołania zwrotnego jest odwrócona w porównaniu do mapfunkcji JS „waniliowej” ( (item, index) =>)
imrok,
168

Nie znam jQuery, ale wiem, że jeśli dostaniesz element select, zawiera on obiekt „options”.

var myOpts = document.getElementById('yourselect').options;
alert(myOpts[0].value) //=> Value of the first option
KooiInc
źródło
74
+1. Nie uciekaj się do złożonej magii wyboru jQuery'ego dla rzeczy, które mają już dość wydajne implementacje wbudowane w zwykły stary DOM.
bobince
19
Dlaczego nie @bince? Jeśli najczęściej używasz jQuery, jest to szybsze zarówno z mniejszym kodem do napisania, jak i szybszym, aby nie próbować wymyślić, czy w tym przypadku powinieneś przełączyć się na zwykły javascript. Twój kod jest bardziej spójny.
Andrew
139

$.map jest prawdopodobnie najbardziej wydajnym sposobem na zrobienie tego.

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

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

Możesz dodać opcje zmiany, $('#selectBox option:selected')jeśli chcesz tylko te, które są wybrane.

Pierwszy wiersz zaznacza wszystkie pola wyboru i umieszcza ich element jQuery w zmiennej. Następnie używamy .mapfunkcji jQuery, aby zastosować funkcję do każdego elementu tej zmiennej; wszystko, co robimy, to zwracanie wartości każdego elementu, ponieważ to wszystko, na czym nam zależy. Ponieważ zwracamy je wewnątrz funkcji mapy, buduje tablicę wartości dokładnie zgodnie z żądaniem.

PCasagrande
źródło
3
To najbardziej eleganckie rozwiązanie IMO. Mapa to bardzo potężny konstrukt, który pasuje dokładnie do tej sytuacji.
hazerd,
1
Naprawdę podoba mi się twoje rozwiązanie - takie podejście zastosowałem. Jeśli jednak chcesz tylko wybrane wartości, jest to jeszcze bardziej trywialne: $('#selectBox').val()zwróci tablicę wybranych wartości.
whoisthemachine
Cześć, @PCasagrande Mam niestandardową nazwę atrybutu „typ danych”. Jak mogę uzyskać wartość tego za pomocą twojego rozwiązania? To, co robię, to „Option.data-type”, ale to daje mi NaN. Z góry dziękuję.
Me_developer,
Cześć, @PCasagrande Dostałem to, czego potrzebowałem, wykonując polecenie „$ (opcja, to) .attr („ typ danych ”). Ale jeśli masz coś lepszego, daj mi znać. Dzięki. :)
Me_developer,
Myślę, że możesz po prostu zrobić „return option.attr („ data-type ”);” na mapie. To powinno dać tablicę wartości typów danych.
PCasagrande
74

Niektóre odpowiedzi wykorzystują each, ale mapjest lepszą alternatywą tutaj IMHO:

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

W mapjQuery są (przynajmniej) dwie funkcje. Odpowiedź Thomasa Petersena wykorzystuje „Utilities / jQuery.map”; ta odpowiedź używa „Traversing / map” (a zatem trochę czystszego kodu).

To zależy od tego, co zrobisz z wartościami. Jeśli, powiedzmy, chcesz zwrócić wartości z funkcji, mapjest to prawdopodobnie lepsza alternatywa. Ale jeśli zamierzasz użyć wartości bezpośrednio, których prawdopodobnie chcesz each.

Cic
źródło
4
Możesz użyć this.value zamiast $ (this) .val () tutaj. Lepiej będzie Ci też służyć znalezienie dzieci w początkowym selektorze (opcja #example). Jednak fajnie trudne z get () na końcu.
Alex Barrett
1
@Alex Barret: Cóż, można rozwiązać ten problem bez użycia jQuery. Wywołanie jQuery z elementem jako argumentem po prostu owinie element w obiekcie jQuery (tzn. Nie będzie przechodzić przez drzewo, tj. Nie będzie tak drogo). Więc może jako mikrooptymalizacja, tak.
cic
mapa FTW. Dokładnie tak należy to zrobić. Funkcja get () na końcu wydaje się niepotrzebna (jednak zwraca węzeł DOM, a val () już daje nam ciąg znaków, więc ...?) Var opts = $ ('# cm_amt option'). Map (function ( ) {return parseInt ($ (this) .val ());});
sbeam
3
@sbeam: „Ponieważ zwracaną wartością jest tablica owinięta jQuery, bardzo często get()zwracany obiekt działa z tablicą podstawową”. - api.jquery.com/map
CIC
To pomogło mi bardzo, nie chciałem tekst wartości, więc po prostu zmieniły się text()zamiast val(). Dziękuję Ci ! ( ;->
Sprawiłem
52
$('select#id').find('option').each(function() {
    alert($(this).val());
});
Raibaz
źródło
1
To jest bilet, ponieważ lubię buforować elementy do zmiennych przy init, zamiast używać selektora.
Doug Beard
1
Współpracuje również z $ (this) (czego szukał) np.
Hugh Seagraves
16
$("#id option").each(function()
{
    $(this).prop('selected', true);
});

Chociaż sposób PRAWIDŁOWY polega na ustawieniu właściwości DOM elementu, tak jak poniżej:

$("#id option").each(function(){
    $(this).attr('selected', true);
});
Ben Sewards
źródło
4
Czy nie byłby to .attr („wybrany”, „wybrany”)?
v010dya
16

Spowoduje to umieszczenie wartości opcji #myselectboxw ładnej, czystej tablicy:

// 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();});
Thomas Petersen
źródło
Możesz to skrócić do:$.map(domelts, elt=> $(elt).val())
Jonno_FTW
11

Możesz wziąć wszystkie „wybrane wartości” pod nazwą pól wyboru i przedstawić je w żądle oddzielonym „,”.

Dobrym sposobem na to jest użycie $ .map () jQuery:

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

alert(selected_val);
Limpan
źródło
6
ten kod jest dość nieczytelny, nigdy bym go nie użył, nawet jeśli jest trochę fajny.
Kliknij Upvote
7
również pytanie dotyczy, selecta optionnie pól wyboru.
Demencja
6

Przykład roboczy

Najbardziej efektywnym sposobem na to jest użycie $.map()

Przykład:

var values = $.map($('#selectBox option'), function(ele) {
   return ele.value; 
});
Naveen Kumar Alonekar
źródło
3

Możesz do tego użyć następującego kodu:

var assignedRoleId = new Array();
$('#RolesListAssigned option').each(function(){
    assignedRoleId.push(this.value);
});
Mitul Maheshwari
źródło
2

W przypadku opcji wielokrotnego wyboru:

$('#test').val()zwraca listę wybranych wartości. $('#test option').lengthzwraca całkowitą liczbę opcji (zarówno wybranych, jak i nie wybranych)

Siergiej Zinowjew
źródło
1

To jest prosty skrypt z 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>
Cubiczx
źródło
1

Oto prosty przykład w jquery, aby uzyskać wszystkie wartości, teksty lub wartość wybranego elementu lub tekst wybranego elementu

$('#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' />

NuOne
źródło
0
$("input[type=checkbox][checked]").serializeArray();

Lub:

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

Aby zobaczyć wyniki:

alert($("input[type=checkbox][checked]").serializeArray().toSource());
Pavel Krinitskiy
źródło
0

Jeśli szukasz wszystkich opcji z zaznaczonym tekstem, poniższy kod będzie działał.

$('#test').find("select option:contains('B')").filter(":selected");
Tjcool
źródło
0

Krótka droga

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

lub

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;}
Emin Adiloğlu
źródło