Cad*_*oux 7 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(',');
Run Code Online (Sandbox Code Playgroud)
lb.options.toString()显然不起作用,因为它是一个选项数组(值和文本).我没有找到比这更多的succint.
jQuery的方法是什么?我试着乱搞$(lb).each(),但似乎无法让它以同样的方式工作.
use*_*716 13
txtfield.value = $(lb.options).map(function() {
return this.value;
}).get().join(',');
Run Code Online (Sandbox Code Playgroud)
这用于.map()通过返回value每个jQuery对象来创建jQuery对象option,然后用于.get()从对象中提取Array.
编辑:作为@Nick Craver在下面的评论指出,如果需要获得最佳性能(使用jQuery),它更有意义使用的$.map()变化,因为你已经有一个集合.详情请见他的回答.
编辑:要获得更好的性能,请执行for循环,但缓存对属性的引用.它有所作为.
var arr = [], opts = lb.options, len = opts.length;
for (var i = 0; i < len; i++) {
arr[i] = opts[i].value;
}
txtfield.value = arr.join(',');
Run Code Online (Sandbox Code Playgroud)
jQuery版本是.map()这样的:
var arr = $(lb).find("option").map(function() { return this.value; }).get();
txtfield.value = arr.join(',');
Run Code Online (Sandbox Code Playgroud)
或者$.map()像这样快一点:
var arr = $.map(lb.options, function(o) { return o.value; });
txtfield.value = arr.join(',');
Run Code Online (Sandbox Code Playgroud)
但是,两者都比循环效率低得多for,请使用您已有的纯JavaScript版本.
看map()..
$('#lbID option').map(function() {
return $(this).val();
}).get().join(',');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12384 次 |
| 最近记录: |