JQuery kullanarak bir seçimin tüm seçenekleri nasıl elde edilir?


Yanıtlar:


612

kullanın:

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

.each () | jQuery API Belgeleri


63
JavaScript işlemlerinin hiçbiri jQuery gerektirmez. jQuery, JS işlemlerini basitleştirmek için tercih edilen bir konudur.
ruuter

8
şunları da yapabilirsiniz: $ ("# id option"). her biri (işlev (ad, val) {var opt = val.text;});
kofifus

3
$.mapçok daha zarif ve daha az hata eğilimli (aşağıya bakın).
Elliot Cameron

1
$('#id option').map((index, option) => option.value): "vanilya" JS mapişlevine kıyasla geri arama imzasının nasıl tersine çevrildiğine dikkat edin ( (item, index) =>)
imrok

168

JQuery bilmiyorum, ancak select öğesi alırsanız, bir 'seçenekler' nesne içerdiğini biliyorum.

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

74
+1. Düz eski DOM'da zaten oldukça etkili uygulamalara sahip olan şeyler için jQuery'nin karmaşık seçici sihrine başvurmayın.
bobince

19
Neden olmasın, @bobince? Çoğunlukla jQuery kullanıyorsanız, daha az kod yazılması daha hızlıdır ve bu örnekte normal javascript'e geçmeniz gerekip gerekmediğini anlamaya çalışmak daha hızlıdır. Ve kodunuz daha tutarlı.
Andrew

139

$.map muhtemelen bunu yapmanın en etkili yoludur.

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

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

$('#selectBox option:selected')Yalnızca seçili olanları istiyorsanız değişiklik seçenekleri ekleyebilirsiniz .

İlk satır tüm onay kutularını seçer ve jQuery öğelerini bir değişkene koyar. Daha sonra .mapbu değişkenin öğelerinin her birine bir işlev uygulamak için jQuery işlevini kullanırız; yaptığımız tek şey her bir elementin değerini geri döndürmek. Bunları harita işlevi içinde döndürdüğümüz için, aslında istendiği gibi bir değer dizisi oluşturur.


3
Bu en şık çözüm IMO. Harita tam olarak bu duruma uyan çok güçlü bir yapıdır.
hazerd

1
Çözümünüzü gerçekten çok seviyorum - bu benim yaklaşımım. Ancak, sadece seçilen değerleri istiyorsanız daha da önemsizdir: $('#selectBox').val()seçilen değerlerin bir dizisini döndürür.
whoisthemachine

Merhaba, @PCasagrande Özel bir özellik adı 'veri türü' var. Çözümünüzü kullanarak bunun değerini nasıl alabilirim? Yaptığım şey 'option.data-type', ama bu bana NaN veriyor. Şimdiden teşekkürler.
Me_developer

Merhaba, @PCasagrande '$ (seçenek, bu) .attr ("veri türü")' yaparak ne ihtiyacım var. Ama daha iyi bir şeyiniz varsa bana bildirin. Teşekkürler. :)
Me_developer

Bence sadece 'return option.attr ("data-type");' harita. Bu, veri türlerinin değerlerinin bir dizisini vermelidir.
PCasagrande

74

Bazı cevaplar kullanır each, ancak mapburada daha iyi bir alternatif IMHO:

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

JQuery'de (en az) iki mapişlev vardır. Thomas Petersen'in cevabı "Utilities / jQuery.map" kullanıyor; bu cevap "Geçiş / harita" (ve dolayısıyla biraz daha temiz bir kod) kullanır.

Değerlerle ne yapacağınıza bağlıdır. Diyelim ki, değerleri bir işlevden döndürmek istiyorsanız map, muhtemelen daha iyi bir alternatiftir. Ama eğer değerleri doğrudan kullanacaksanız, muhtemelen istediğiniz each.


4
Burada $ (this) .val () yerine this.value kullanabilirsiniz. İlk seçicideki çocukları bularak da daha iyi hizmet edersiniz (#example seçeneği). Sonunda olsa get () ile güzel zor.
Alex Barrett

1
@Alex Barret: Bu sorunu jQuery kullanmadan çözmek mümkündür. JQuery öğesini bir öğe ile bağımsız değişken olarak çağırmak, öğeyi bir jQuery nesnesine sarar. Belki bir mikro optimizasyon olarak, evet.
cic

haritası FTW. Tam olarak böyle yapılmalı. Ancak sonunda () işlevi gereksiz görünüyor (DOM düğümünü döndürüyor ve val () zaten bize bir dize veriyor, bu yüzden ...?) Var opts = $ ('# cm_amt option'). Map (function (function ) {dönüş parseInt ($ (this) .val ());});
sbeam

3
@sbeam: "Dönüş değeri jQuery ile sarılmış bir dizi olduğundan get(), döndürülen nesnenin temel bir diziyle çalışması çok yaygındır ." - api.jquery.com/map
cic

Bana çok yardımcı oldu, metnin değeri değil olmasını istedim, text()bunun yerine sadece değiştirdim val(). Teşekkür ederim ! (1000'in üzerinden ;->
geçmene

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

1
Bu bilet, çünkü öğeleri seçiciyi kullanmak yerine init üzerinde değişkenlere önbelleğe almak istiyorum.
Doug Beard

1
Ayrıca $ (this) (aradığı şey) ile çalışır örneğin,
Hugh Seagraves

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

Bununla birlikte, DOĞRU yol, öğenin DOM özelliğini şu şekilde ayarlamaktır:

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

4
.Attr ('seçildi', 'seçildi') olmaz mı?
v010dya

16

Bu seçenek değerlerini #myselectboxsizin için güzel ve temiz bir diziye koyacaktır :

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

Bunu şu şekilde kısaltabilirsiniz:$.map(domelts, elt=> $(elt).val())
Jonno_FTW

11

Tüm "seçili değerlerinizi" onay kutularının adıyla alabilir ve bunları "," ile ayrılmış bir sokette sunabilirsiniz.

Bunu yapmanın güzel bir yolu jQuery'nin $ .map () yöntemini kullanmaktır:

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

alert(selected_val);

6
Bu kod oldukça okunamıyor, biraz havalı olsa bile asla kullanmazdım.
Upvote

7
ayrıca soru hakkında selectve optiononay kutuları değil.
Dementic


3

Bunun için aşağıdaki kodu kullanabilirsiniz:

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

2

Çoklu seçim seçeneği için:

$('#test').val()seçilen değerlerin listesini döndürür. $('#test option').lengthtoplam seçenek sayısını döndürür (hem seçili hem de seçili değil)


1

Bu jQuery ile basit bir Script:

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

Jquery'de seçilen öğenin tüm değerlerini, metinlerini veya değerini veya seçilen öğenin metnini almak için basit bir örnek

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

Veya:

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

Sonuçları görmek için:

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

0

Bazı seçili metne sahip tüm seçenekleri arıyorsanız, aşağıdaki kod çalışacaktır.

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

0

Kısa yol

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

veya

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;}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.