Javascript 将列表框中的所有选项转换为逗号分隔字符串的惯用jQuery?
其中lb是一个列表框,txtfield是一个文本框,此代码获取选项的所有值,将它们放入数组中,并将其放入逗号分隔的列表中:Javascript 将列表框中的所有选项转换为逗号分隔字符串的惯用jQuery?,javascript,jquery,dom,Javascript,Jquery,Dom,其中lb是一个列表框,txtfield是一个文本框,此代码获取选项的所有值,将它们放入数组中,并将其放入逗号分隔的列表中: var arr = []; for (var i = 0; i < lb.length; i++) { arr[i] = lb.options[i].value; } txtfield.value = arr.join(','); var arr=[]; 对于(变量i=0;i
var arr = [];
for (var i = 0; i < lb.length; i++) {
arr[i] = lb.options[i].value;
}
txtfield.value = arr.join(',');
var arr=[];
对于(变量i=0;i
lb.options.toString()显然不起作用,因为它是一个选项数组(值和文本)。我找不到比这更简洁的了
jQuery是如何做到这一点的?我试着用
$(lb).each()
,但似乎无法以相同的方式使其工作。这是与您的代码等效的jQuery。不过,还有更优雅的解决方案
var values = [];
$(lb).children('option').each(function () {
values.push($(this).text());
});
$(txtfield).val(values.join(','));
这可以通过返回每个选项
的值
来创建jQuery对象,然后从对象中提取数组
编辑:如下面的评论所述,如果您需要获得最佳性能(使用jQuery),那么使用jQuery会更有意义,因为您已经有了一个集合。详情请参阅
编辑:要获得更好的性能,请执行
for
循环,但缓存对属性的引用。它
var arr=[],opts=lb.options,len=opts.length;
对于(变量i=0;i
jQuery版本如下:
var arr = $(lb).find("option").map(function() { return this.value; }).get();
txtfield.value = arr.join(',');
var arr = $.map(lb.options, function(o) { return o.value; });
txtfield.value = arr.join(',');
或者像这样快一点:
var arr = $(lb).find("option").map(function() { return this.value; }).get();
txtfield.value = arr.join(',');
var arr = $.map(lb.options, function(o) { return o.value; });
txtfield.value = arr.join(',');
但是,这两种方法的效率都比低得多。对于循环,请使用您已有的普通JavaScript版本
我可以这样做,但我不确定你想要实现什么
$('option', $(lb)).each(function() { arr.push($(this).text()) });
请参见此处的演示:
可以使用分隔符获取多个选定选项文本值
$('#testID')。更改(函数(){
var test=$(this).find(“选项:selected”).map(函数(){
返回$(this.text();
}).get().join('/');
警报(测试);
});代码>
测试值1
测试值2
测试值3
测试值4
测试值5
测试值6
可能重复的@epascarello不是重复的,因为我使用$(domeElement),因为我已经有了一个DOM元素。在这种情况下,最好使用jQuery.map()
,这样浪费更少/更快,您可以在这里测试它:感谢大家进行了非常彻底的调查工作。我将权衡保持循环代码的优化版本(这比我最初重构的版本要好)与更简洁或可维护的版本。我花了10分钟来解决这个问题,这里已经有了另外三个类似的答案!
$('option', $(lb)).each(function() { arr.push($(this).text()) });