Jak uzyskać wszystkie opcje zaznaczenia za pomocą jQuery?


Odpowiedzi:


612

Posługiwać się:

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

.each () | Dokumentacja API jQuery


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

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.


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.


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());
});

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);
});

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();});

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);

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


3

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

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

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)


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>

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' />


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

Lub:

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

Aby zobaczyć wyniki:

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

0

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

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

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;}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.