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.