其中lb是一个列表框,txtfield是一个文本框,下面的代码获取选项的所有值,将它们放入一个数组中,并将其放入一个逗号分隔的列表中:
var arr = [];
for (var i = 0; i < lb.length; i++) {
arr[i] = lb.options[i].value;
}
txtfield.value = arr.join(',');lb.options.toString()显然不起作用,因为它是一个选项数组(值和文本)。我没有找到比这更简洁的东西了。
jQuery有什么方法可以做到这一点?我试着摆弄$(lb).each(),但似乎不能让它以同样的方式工作。
发布于 2010-11-17 06:49:27
txtfield.value = $(lb.options).map(function() {
return this.value;
}).get().join(',');此uses .map()通过返回每个数组的value来创建一个option对象,然后使用uses .get()从对象中提取数组。
编辑:正如@Nick Craver在下面的评论中指出的那样,如果您需要获得最佳性能(使用jQuery),使用the $.map() variation会更有意义,因为您已经有了一个集合。See his answer获取详细信息。
编辑:为了获得更好的性能,执行for循环,但是缓存对属性的引用。It makes a difference。
var arr = [], opts = lb.options, len = opts.length;
for (var i = 0; i < len; i++) {
arr[i] = opts[i].value;
}
txtfield.value = arr.join(',');发布于 2010-11-17 06:50:06
jQuery版本是这样的.map():
var arr = $(lb).find("option").map(function() { return this.value; }).get();
txtfield.value = arr.join(',');或者像这样使用$.map()会更快一些:
var arr = $.map(lb.options, function(o) { return o.value; });
txtfield.value = arr.join(',');然而,这两个都是的,效率明显低于for循环,请使用您已有的普通JavaScript版本。
发布于 2010-11-17 06:50:53
看看map()..
$('#lbID option').map(function() {
return $(this).val();
}).get().join(',');https://stackoverflow.com/questions/4199826
复制相似问题