如何使用JQuery访问和循环特定类的所有下拉菜单?

时间:2009-09-22 01:57:05

标签: jquery

有一个可能无限的下拉集合,给它们所有相同的类,需要能够访问,循环,并收集所有下拉选项上的选定值,无论有多少。最终形式应该类似于5,6,7,6,4,2,3,4,3,4,作为所有下拉列表中所选值的逗号分隔列表。

2 个答案:

答案 0 :(得分:1)

var ids = $("select.classname > option:selected").map(function(n, i) {
  return $(n).val();
}).join(",");

解释这是在做什么:

  1. 首先,它选择给定下拉列表中的所有选定选项(由“classname”标识);
  2. 它将每个选定的选项传递给回调函数;
  3. 该回调函数返回所选选项的值;
  4. 因为您在所选选项的数组上调用了map,所以现在使用map()方法获得了一组值;
  5. join()函数将该数组转换为逗号分隔列表。
  6. 例如:

    <select class="classname">
      <option value="1">One</option>
      <option value="2" selected>Two</option>
      <option value="3" selected>Three</option>
    </select>
    <select class="classname">
      <option value="4">Four</option>
      <option value="5" selected>Five</option>
    </select>
    

    首先使用$()构造所选选项(2,3和5)的jQuery对象,将值属性映射到{2,3,5}数组中,然后将它们连接成逗号分隔的字符串"2,3,5"

答案 1 :(得分:1)

似乎cletus提出的答案有两个问题需要解决我的jQuery版本(1.6.2)。下面的代码对我来说正常工作,并在cletus的帖子中使用样本HTML时提醒“3,5”。请注意,它会从第一个HTML选择块中找到 last 选项,而不是两个选中的选项。

var ids = $("select.classname > option:selected").map(function(n, i) { return $(i).val() } ).toArray().join(",");

alert(ids);

首先,它在map函数回调中使用了错误的参数。我需要将 n 更改为return $(n).val() vs return $(i).val()

其次,在使用数组方法“join”之前,它返回了一个需要转换为数组的jQuery对象:.toArray().join(",")

一旦完成了这两个小修改,cletus的回答在jQuery 1.6.2中完美适合我