select 元素的动态设置选项会跳过第一个元素
Dynamically setting options for a select elements skips first element
我动态构建了一个分为两个选项组的选项数组。这些选项组存储在名为 ogs
的 javascript 数组中。相同的代码如下:
var ogs = [];
for (optGroup in optionsList) {
var og = document.createElement('optgroup');
og.label = optGroup;
var ops = optionsList[optGroup];
for (op in ops) {
var o = document.createElement('option');
o.value = op;
o.text = ops[op];
og.appendChild(o);
}
ogs.push(og);
}
现在,我正在尝试将这些选项添加到 2 个 select 元素,如下所示:
var from_el = document.getElementById('from_selector'), to_el = document.getElementById('to_selector');
for (i = 0; i < ogs.length; ++i) {
var og = ogs[i];
from_el.add(og);
to_el.add(og);
}
但是,在脚本末尾,只有 to_selector
填充了选项,而 from_selector
仍然是空的。我像这样填充选项的原因是因为这两个 select 元素都使用 select2,而任何其他方法(例如 innerHTML
)花费的时间要长得多。我也试过将这些 select or 放在数组中并迭代它们,总是最后一个 select 被填充,而第一个 select 保持空。
解决了问题。问题出在以下几行:
from_el.add(og);
to_el.add(og);
当 og 添加到 to_el 时,它与 from_el 分离。解决方案是将其替换为。
from_el.add(og);
to_el.add(og.cloneNode(true));
我动态构建了一个分为两个选项组的选项数组。这些选项组存储在名为 ogs
的 javascript 数组中。相同的代码如下:
var ogs = [];
for (optGroup in optionsList) {
var og = document.createElement('optgroup');
og.label = optGroup;
var ops = optionsList[optGroup];
for (op in ops) {
var o = document.createElement('option');
o.value = op;
o.text = ops[op];
og.appendChild(o);
}
ogs.push(og);
}
现在,我正在尝试将这些选项添加到 2 个 select 元素,如下所示:
var from_el = document.getElementById('from_selector'), to_el = document.getElementById('to_selector');
for (i = 0; i < ogs.length; ++i) {
var og = ogs[i];
from_el.add(og);
to_el.add(og);
}
但是,在脚本末尾,只有 to_selector
填充了选项,而 from_selector
仍然是空的。我像这样填充选项的原因是因为这两个 select 元素都使用 select2,而任何其他方法(例如 innerHTML
)花费的时间要长得多。我也试过将这些 select or 放在数组中并迭代它们,总是最后一个 select 被填充,而第一个 select 保持空。
解决了问题。问题出在以下几行:
from_el.add(og);
to_el.add(og);
当 og 添加到 to_el 时,它与 from_el 分离。解决方案是将其替换为。
from_el.add(og);
to_el.add(og.cloneNode(true));