Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将列表框中的所有选项转换为逗号分隔字符串的惯用jQuery?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 将列表框中的所有选项转换为逗号分隔字符串的惯用jQuery?

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

其中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
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()) });