【问题标题】:jquery collect all option values from select box in a JSON arrayjquery 从 JSON 数组中的选择框中收集所有选项值
【发布时间】:2012-02-13 09:24:05
【问题描述】:

我有一个选择框。

<select id='x'>
    <option value='1'>'Vineet'</option>
    <option value='2'>'Vivek'</option>
    <option value='3'>'Madhu'</option>
</select>

选项是动态添加的。最后,我想将此选择框中包含的所有选项元素的值收集到一个数组中。我在论坛中搜索了答案,但 Q/A 仅用于获取“已选择”选项。

我试过了:

var myList = [];
$('#x').each(function() { myList.push( $(this).value() ) });

在萤火虫中,它给出了这个错误:

属性列表后缺少 }

但我没有看到任何丢失的}。我在这里做错了什么?

【问题讨论】:

  • 你是否在每个值之后添加一个','?
  • 的任何值都没有逗号
  • $(this).val() 而不是 $(this).value()
  • 除此之外,如果我必须得到每个
  • 如果一个元素分配了多个类怎么办?例如 class="myBold myLargeFont myGreen" - 查看 jquery 的 attr:api.jquery.com/attr - 另请查看 .hasClass

标签: javascript jquery html json


【解决方案1】:

你需要遍历 select 中的每个 option 元素,而不仅仅是 select 本身,在 jQuery 中获取输入值的正确方法是 val(),试试这个:

myList = [];
$('#x option').each(function() {
  myList.push($(this).val())
});

Example fiddle

你也可以使用map():

var myList = $('#x option').map(function() {
  return this.value;
}).get();

// A version of the above in ES6 (note: unsupported in IE)
let myList = $('#x option').map((i, el) => el.value).get();

在上述所有情况下,myList 变量将包含一个字符串数组。

【讨论】:

  • 你遇到了什么错误?你确定你尝试过那个确切的解决方案 - 正如你从小提琴中看到的那样,它确实有效。
  • 糟糕。我的坏那里。我只提供了 ('#x') 而不是 ('#x option')。现在它起作用了。谢谢罗里。
【解决方案2】:

尝试使用 jQuery 函数获取元素的值(包装在 jQuery 对象中)是 .val(),而不是 .value() - 这可能会引起一些混乱,但我不能确定。

附带说明,您的选择器不符合您的要求。 $('#x') 将返回具有xid 的所有元素 - 这应该只是一个元素 - 然后.each() 将遍历该组元素(因此它将调用该函数一次)。您最终会得到一个包含单个值的数组,该值将是 &lt;select&gt; 输入的当前选定值。

改为使用$('#x &gt; option'),它将返回所有&lt;option&gt;元素,这些元素是&lt;select&gt;元素与idx的直接子元素。

【讨论】:

  • 在您建议的更正后它工作了。谢谢安东尼。
  • 亲爱的安东尼,你和罗尼给出的答案是一样的(难怪)。在接受答案时,由于只能接受一个答案,所以我选择了第一个。但同样的功劳归于你。谢谢。
  • 扩展这个,如果我必须得到每个
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2013-10-10
相关资源
最近更新 更多