JavaScript:将一个选择列表复制到另一个选择列表
javascript: copying one select list to another
我使用以下代码:
var x = document.getElementById("one");
var len = x.options.length;
var y = document.getElementById("two");
for (i = 0; i < len; i++) {
var option = document.createElement("option");
option.text = option.value = x.options[i].value;
y.add(option);
x.remove(i);
}
但是,我看到以下错误:
Cannot read property 'value' of undefined
第一个列表框中的元素也不会被删除。我错在哪里?
您正在从x.options
中删除元素,但是当您这样做时,列表会变小,并且您仍在迭代直到旧的长度值。因此,在某些时候,您将获得一个超过(现已缩短)列表末尾的索引,并且x.options[i]
将被undefined
。只要x.options[0]
存在,您就可以通过迭代来解决此问题,始终从列表中删除第一个元素:
var x = document.getElementById("one");
var y = document.getElementById("two");
while ( x.options[0] ) {
var option = document.createElement("option");
option.text = option.value = x.options[0].value;
y.add(option);
x.remove(0);
}
或者通过反向迭代:
var x = document.getElementById("one");
var len = x.options.length;
var y = document.getElementById("two");
for (i = len; i--;) {
var option = document.createElement("option");
option.text = option.value = x.options[i].value;
y.add(option,0);
x.remove(i);
}
在
迭代数组时从数组中删除元素通常不是一个好主意,因为您可能会丢弃索引。如果您按索引的降序而不是增加顺序浏览元素,则应避免此问题
相关文章:
- Angular:使用选择列表选择过滤代码中的对象
- JavaScript类列表选择器错误
- 将下拉列表“选择值”传递到 URL
- 禁用基于下拉列表选择 asp.net JavaScript 启用文本框
- 下拉列表<选择>为列表.js
- 经典 ASP - 下拉列表:选择与第一个下拉列表具有相同值的所有下拉列表
- 映射下拉列表选择到URL
- 删除基于先前下拉列表选择的“选择下拉列表”选项
- 在下拉列表选择中显示模态
- 下拉列表选择的值在UI淘汰js中没有更新
- 如何将 ID 分配给动态下拉列表选择
- 使用 dojo 将鼠标悬停在动态下拉列表选择上时添加工具提示
- 链接下拉列表选择列表代码 -- 连接数据
- Javascript 不遵循下拉列表选择
- 检索引导下拉列表选择文本
- 表单事件更改不适用于下拉列表选择
- 无法检测加载时的选择/下拉列表选择事件
- 将 CakePHP 命名参数添加到列表选择的 URL 中
- 为什么聚合物核心列表选择中的切换操作不正确
- 为列表选择类并仅设置其中一个类