วิธีรับตัวเลือกทั้งหมดโดยใช้ jQuery


406

ฉันจะรับตัวเลือกทั้งหมดของการเลือกผ่าน jQuery โดยส่งผ่าน ID ได้อย่างไร

ฉันแค่มองหาค่าของพวกเขาไม่ใช่ตัวอักษร

คำตอบ:


612

ใช้:

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

.each () | เอกสาร jQuery API


63
ไม่มีการทำงานของ JavaScript ที่ต้องการ jQuery jQuery เป็นเรื่องของทางเลือกในการทำให้การดำเนินงาน JS ง่ายขึ้น
ruuter

8
คุณยังสามารถทำได้: $ ("# id option") แต่ละตัว (ฟังก์ชั่น (ชื่อ, val) {var opt = val.text;});
kofifus

3
$.mapมีความหรูหรามากกว่าและมีข้อผิดพลาดน้อยกว่า (ดูด้านล่าง)
Elliot Cameron

1
$('#id option').map((index, option) => option.value): โปรดทราบว่าลายเซ็นการโทรกลับจะถูกย้อนกลับอย่างไรเมื่อเทียบกับmapฟังก์ชั่น"วานิลลา" JS ( (item, index) =>)
388

168

ฉันไม่ทราบ jQuery แต่ฉันรู้ว่าถ้าคุณได้รับองค์ประกอบที่เลือกมันมีวัตถุ 'ตัวเลือก'

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

74
+1 อย่าหันไปใช้เวทย์มนตร์ตัวเลือกที่ซับซ้อนของ jQuery สำหรับสิ่งที่มีการใช้งานที่มีประสิทธิภาพอยู่แล้วใน DOM เก่าธรรมดา
bobince

19
ทำไมไม่ @bobince หากคุณใช้ jQuery เป็นส่วนใหญ่การเขียนทั้งโค้ดที่น้อยกว่าและเร็วกว่าที่จะไม่ลองและคิดออกว่าคุณควรเปลี่ยนเป็นจาวาสคริปต์ปกติในกรณีนี้หรือไม่ และรหัสของคุณสอดคล้องกันมากขึ้น
Andrew

139

$.map อาจเป็นวิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้

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

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

คุณสามารถเพิ่มตัวเลือกการเปลี่ยนแปลงได้$('#selectBox option:selected')หากคุณต้องการตัวเลือกที่เลือกไว้

บรรทัดแรกเลือกช่องทำเครื่องหมายทั้งหมดและทำให้องค์ประกอบ jQuery เป็นตัวแปร จากนั้นเราใช้.mapฟังก์ชั่นของ jQuery เพื่อใช้ฟังก์ชั่นกับแต่ละองค์ประกอบของตัวแปรนั้น สิ่งที่เราทำคือคืนค่าของแต่ละองค์ประกอบตามที่เราสนใจ เนื่องจากเราจะส่งคืนพวกเขาภายในฟังก์ชั่นแผนที่มันสร้างอาร์เรย์ของค่าตามที่ร้องขอ


3
นี่คือทางออกที่ดีที่สุด IMO แผนที่เป็นสิ่งก่อสร้างที่ทรงพลังมากซึ่งเหมาะกับสถานการณ์นี้
hazerd

1
ฉันชอบวิธีการแก้ปัญหาของคุณ - มันเป็นแนวทางที่ฉันใช้ อย่างไรก็ตามหากคุณต้องการค่าที่เลือกมันยิ่งสำคัญกว่า: $('#selectBox').val()จะส่งคืนอาร์เรย์ของค่าที่เลือก
whoisthemachine

สวัสดี @PCasagrande ฉันมีชื่อแอตทริบิวต์ที่กำหนดเองว่า 'ประเภทข้อมูล' ฉันจะได้รับประโยชน์จากสิ่งนี้โดยใช้โซลูชันของคุณได้อย่างไร? สิ่งที่ฉันกำลังทำคือ 'option.data-type' แต่นี่ทำให้ฉัน NaN ขอบคุณล่วงหน้า.
Me_developer

สวัสดี @PCasagrande ฉันได้รับสิ่งที่ฉันต้องการโดยทำ '$ (ตัวเลือกนี้) .attr ("data-type")' แต่ถ้าคุณมีอะไรที่ดีกว่านี้ให้ฉันรู้ ขอบคุณ :)
Me_developer

ฉันคิดว่าคุณสามารถทำ 'return option.attr ("data-type");' ในแผนที่ ที่ควรให้คุณอาเรย์ของค่าของชนิดข้อมูล
PCasagrande

74

บางคำตอบใช้eachแต่mapเป็นทางเลือกที่ดีกว่าที่นี่ IMHO:

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

มีอย่างน้อยสองmapฟังก์ชั่นใน jQuery คำตอบของ Thomas Petersen ใช้ "Utilities / jQuery.map"; คำตอบนี้ใช้ "Traversing / map" (และดังนั้นจึงเป็นรหัสที่สะอาดขึ้นเล็กน้อย)

ขึ้นอยู่กับสิ่งที่คุณจะทำกับค่า ถ้าคุณสมมติว่าต้องการคืนค่าจากฟังก์ชั่นmapน่าจะเป็นทางเลือกที่ดีกว่า eachแต่ถ้าคุณจะไปใช้ค่าโดยตรงคุณอาจต้องการ


4
คุณสามารถใช้ this.value แทน $ (this) .val () ที่นี่ คุณจะได้รับบริการที่ดีขึ้นด้วยการค้นหาเด็ก ๆ ในตัวเลือกเริ่มต้น (ตัวเลือก #example) นิสัยดีกับรับ () ในตอนท้ายว่า
Alex Barrett

1
@Alex Barret: ก็เป็นไปได้ที่จะแก้ปัญหานี้โดยไม่ต้องใช้ jQuery เลย การเรียก jQuery ด้วยอิลิเมนต์เป็นอาร์กิวเมนต์จะตัดองค์ประกอบในวัตถุ jQuery (เช่นไม่มีการแวะผ่านต้นไม้นั่นคือไม่แพงเลย) ดังนั้นอาจเป็นการเพิ่มประสิทธิภาพขนาดเล็กใช่
cic

แผนที่ FTW ตรงนี้เป็นวิธีที่ควรทำ get () ที่ส่วนท้ายดูเหมือนว่าไม่จำเป็นอย่างไรก็ตาม (ที่ส่งคืนโหนด DOM และ val () ให้สตริงเราแล้วดังนั้น ... ?) var opts = $ ('# cm_amt ตัวเลือก') map (function ( ) {return parseInt ($ (this) .val ());});
sbeam

3
@sbeam: "เนื่องจากค่าส่งคืนเป็นอาร์เรย์ที่ห่อหุ้ม jQuery จึงเป็นเรื่องธรรมดามากget()ที่วัตถุที่ส่งคืนจะทำงานกับอาร์เรย์พื้นฐานได้" - api.jquery.com/map
CIC

มันช่วยให้ผมมากผมอยากให้ข้อความที่ไม่คุ้มค่าดังนั้นฉันเพียงแค่เปลี่ยนไปแทนtext() val()ขอบคุณ ! (ฉันทำให้คุณไปมากกว่า 1,000 คน;->)
ParPar

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

1
นี่คือตั๋วเพราะฉันชอบที่จะแคชองค์ประกอบเป็นตัวแปรใน init แทนที่จะใช้ตัวเลือก
Doug Beard

1
ใช้งานได้กับ $ (นี่) (ซึ่งเป็นสิ่งที่กำลังมองหา) เช่น
ฮิวจ์ Seagraves

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

แม้ว่าวิธีที่ถูกต้องคือการตั้งค่าคุณสมบัติ DOM ขององค์ประกอบเช่น:

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

4
มันจะเป็น. atr ('ถูกเลือก', 'เลือก') หรือไม่
v010dya

16

สิ่งนี้จะใส่ค่าตัวเลือก#myselectboxในอาร์เรย์ที่สะอาดดีสำหรับคุณ:

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

คุณสามารถย่อให้เหลือ:$.map(domelts, elt=> $(elt).val())
Jonno_FTW

11

คุณสามารถใช้ "ค่าที่เลือก" ทั้งหมดของคุณด้วยชื่อของช่องทำเครื่องหมายและแสดงไว้ในการต่อยคั่นด้วย ","

วิธีที่ดีในการทำเช่นนี้คือใช้ $ .map () ของ jQuery:

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

alert(selected_val);

6
รหัสนี้อ่านไม่ได้สวยฉันจะไม่ใช้มันแม้ว่ามันจะเจ๋ง
คลิกโหวต

7
ยังเป็นคำถามเกี่ยวกับselectและoptionไม่ช่องทำเครื่องหมาย
Dementic


3

คุณสามารถใช้รหัสต่อไปนี้เพื่อ:

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

2

สำหรับตัวเลือกหลายตัวเลือก:

$('#test').val()ส่งคืนรายการค่าที่เลือก $('#test option').lengthส่งคืนจำนวนตัวเลือกทั้งหมด (ทั้งที่เลือกและไม่ได้เลือก)


1

นี่เป็นสคริปต์ง่าย ๆ ที่มี 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

นี่คือตัวอย่างง่ายๆใน jquery เพื่อรับค่าข้อความหรือค่าทั้งหมดของรายการที่เลือกหรือข้อความของรายการที่เลือก

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

หรือ:

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

หากต้องการดูผลลัพธ์:

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

0

หากคุณกำลังมองหาตัวเลือกทั้งหมดที่มีข้อความที่เลือกบางส่วนรหัสด้านล่างจะทำงาน

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

0

ทางสั้น ๆ

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

หรือ

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;}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.