Как получить все варианты выбора, используя jQuery?

366

Как я могу получить все варианты выбора через jQuery, передав его ID?

Я ищу только их значения, а не текст.

Теги:
jquery-selectors

15 ответов

534
Лучший ответ

Использование:

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

. each() | Документация API jQuery

  • 61
    Ни одна из операций JavaScript не требует jQuery. JQuery является вопросом выбора для упрощения операций JS.
  • 8
    Вы также можете сделать: $ ("опция # id"). each (function (name, val) {var opt = val.text;});
Показать ещё 1 комментарий
156

Я не знаю jQuery, но я знаю, что если вы получите элемент select, он содержит объект "options".

var myOpts = document.getElementById('yourselect').options;
alert(myOpts[0].value) //=> Value of the first option
  • 71
    +1. Не прибегайте к сложному волшебству селектора jQuery для вещей, которые уже имеют достаточно эффективные реализации, встроенные в простой старый DOM.
  • 11
    Почему бы и нет, @bobince? Если вы в основном используете jQuery, это быстрее и с меньшим количеством кода, который нужно написать, и быстрее, чтобы не пытаться выяснить, следует ли вам переключиться на обычный javascript в этом случае. И ваш код более последовательный.
122

$.map, вероятно, самый эффективный способ сделать это.

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

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

Вы можете добавить параметры изменения в $('#selectBox option:selected'), если хотите только те, которые были выбраны.

Первая строка выбирает все флажки и помещает их элемент jQuery в переменную. Затем мы используем функцию .map jQuery для применения функции к каждому из элементов этой переменной; все, что мы делаем, это возврат значения каждого элемента, поскольку это все, о чем мы заботимся. Поскольку мы возвращаем их внутри функции map, она фактически строит массив значений, как запрошено.

  • 3
    Это самое элегантное решение ИМО. Карта - очень мощная конструкция, которая подходит именно для этой ситуации.
  • 1
    Мне очень нравится ваше решение - это подход, с которым я пошел. Однако, если вы просто хотите, чтобы выбранные значения были еще более тривиальными: $('#selectBox').val() вернет массив выбранных значений.
Показать ещё 1 комментарий
67

В некоторых ответах используется each, но map - лучшая альтернатива здесь IMHO:

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

В jQuery есть (по крайней мере) две функции map. Ответ Томаса Петерсена использует "Utilities/jQuery.map"; этот ответ использует "Traversing/map" (и, следовательно, немного более чистый код).

Это зависит от того, что вы собираетесь делать со значениями. Если вы, скажем, хотите вернуть значения из функции, map, вероятно, является лучшей альтернативой. Но если вы собираетесь использовать значения непосредственно, вы, вероятно, захотите each.

  • 4
    Вы можете использовать this.value вместо $ (this) .val () здесь. Вам также будет лучше найти детей в начальном селекторе (опция #example). Хорошая жесткость с get () в конце.
  • 1
    @ Алекс Баррет: Ну, эту проблему можно решить без использования jQuery. Вызов jQuery с элементом в качестве аргумента будет просто обернуть элемент в объект jQuery (т.е. не обходить дерево, т.е. не так дорого). Так что, возможно, в качестве микрооптимизации, да.
Показать ещё 5 комментариев
44
$('select#id').find('option').each(function() {
    alert($(this).val());
});
  • 0
    Оно работает. Спасибо :)
  • 0
    Отличная работа. Спасибо.
Показать ещё 1 комментарий
16
$("#id option").each(function()
{
    $(this).prop('selected', true);
});

Хотя способ CORRECT - установить свойство DOM элемента, например:

$("#id option").each(function(){
    $(this).attr('selected', true);
});
  • 3
    Разве это не будет .attr («выбранный», «выбранный»)?
11

Вы можете взять все свои "выбранные значения" по имени флажков и представить их в укусе, разделенном ",".

Хороший способ сделать это - использовать jQuery $.map():

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

alert(selected_val);
  • 6
    этот код довольно нечитабелен, я бы никогда не использовал его, даже если это круто.
  • 7
    также вопрос о select и option не флажки.
10

Это поместит значения параметров #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();});
6

Рабочий пример

Самый эффективный способ сделать это - использовать $.map()

Пример:

var values = $.map($('#selectBox option'), function(ele) {
   return ele.value; 
});
3

Для этого можно использовать следующий код:

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

Для опции multiselect:

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

Вот простой пример в jquery для получения всех значений, текстов или значения выбранного элемента или текста выбранного элемента

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

Если вы ищете все варианты с некоторым выделенным текстом, то код ниже будет работать.

$('#test').find("select option:contains('B')").filter(":selected");
0
$("input[type=checkbox][checked]").serializeArray();

Или:

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

Чтобы увидеть результаты:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню