如何使用jQuery获取select的所有选项?

Cli*_*ote 399 javascript jquery jquery-selectors

如何通过传递其ID来获取select jQuery的所有选项?

我只想获得他们的价值观,而不是文本.

ybo*_*ybo 594

使用:

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

.each()| jQuery API文档

  • JavaScript操作都不需要jQuery.jQuery是简化JS操作的首选问题. (62认同)
  • 你也可以这样做:$("#id option").each(function(name,val){var opt = val.text;}); (8认同)
  • `$ .map`更优雅,更不容易出错(见下文). (3认同)

Koo*_*Inc 162

我不知道jQuery,但我知道如果你得到select元素,它包含一个'options'对象.

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

  • +1.不要使用jQuery的复杂选择器魔法来处理已经在普通旧DOM中内置的非常有效的实现. (72认同)
  • 为什么不,@ bobince?如果你大多使用jQuery,那么用更少的代码编写它会更快,并且更快不去尝试找出你是否应该在这种情况下切换到常规javascript.而且您的代码更加一致. (17认同)

PCa*_*nde 132

$.map 可能是最有效的方法.

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

var values = $.map(options ,function(option) {
    return option.value;
});
Run Code Online (Sandbox Code Playgroud)

$('#selectBox option:selected')如果只需要选择的选项,可以添加更改选项.

第一行选择所有复选框并将其jQuery元素放入变量中.然后我们使用.mapjQuery 的函数将函数应用于该变量的每个元素; 我们所做的就是返回每个元素的值,因为这就是我们所关心的.因为我们将它们返回到map函数内部,所以它实际上是按照请求构建了一个值数组.

  • 这是IMO最优雅的解决方案.Map是一个非常强大的构造,完全符合这种情况. (3认同)

cic*_*cic 70

一些答案使用each,但map在这里是一个更好的选择恕我直言:

$("select#example option").map(function() {return $(this).val();}).get();
Run Code Online (Sandbox Code Playgroud)

mapjQuery 中至少有两个函数.Thomas Petersen的回答使用了"Utilities/jQuery.map"; 这个答案使用"遍历/映射"(因此更简洁的代码).

这取决于你将如何处理这些值.如果你想要从函数中返回值,那么map可能是更好的选择.但是,如果您打算直接使用这些值,您可能需要each.

  • 你实际上可以在这里使用this.value而不是$(this).val().通过在初始选择器中找到子项(#example选项),您也可以获得更好的服务.尽管如此,最好使用get(). (4认同)
  • @sbeam:"由于返回值是一个jQuery包装的数组,`get()`返回的对象与基本数组一起使用是很常见的." - http://api.jquery.com/map/ (3认同)

Rai*_*baz 47

$('select#id').find('option').each(function() {
    alert($(this).val());
});
Run Code Online (Sandbox Code Playgroud)

  • 这就是票,因为我喜欢在 init 上将元素缓存到变量中,而不是使用选择器。 (2认同)

Ben*_*rds 16

$("#id option").each(function()
{
    $(this).prop('selected', true);
});
Run Code Online (Sandbox Code Playgroud)

虽然,CORRECT方法是设置元素的DOM属性,如下所示:

$("#id option").each(function(){
    $(this).attr('selected', true);
});
Run Code Online (Sandbox Code Playgroud)

  • 不是.attr('选中','选中')? (4认同)

小智 15

这会将选项值#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();});
Run Code Online (Sandbox Code Playgroud)


Lim*_*pan 11

您可以通过复选框的名称获取所有"选定值",并将它们显示在以","分隔的标记中.

一个很好的方法是使用jQuery的$ .map():

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

alert(selected_val);
Run Code Online (Sandbox Code Playgroud)

  • 还有一个问题是关于`select`和`option`而不是复选框. (7认同)
  • 这段代码非常难以理解,即使它有点酷也不会使用它. (6认同)

Nav*_*kar 6

工作实例

最有效的方法是使用 $.map()

例:

var values = $.map($('#selectBox option'), function(ele) {
   return ele.value; 
});
Run Code Online (Sandbox Code Playgroud)