javascript - 如何将相同的“选项”元素添加到两个不同的“选择”列表中?
问题描述
我有一个小的 JS 示例,试图将相同的option
元素添加到两个不同的select
列表中,但似乎每当我尝试这样做时,option
只会添加到两个列表中的第二个,我不知道为什么。
HTML:
<select id='one'></select>
<select id='two'></select>
<input type='button' value='click' onclick='ftn();' />
Javascript:
function ftn() {
var one = document.getElementById("one");
var two = document.getElementById("two");
var option = document.createElement("option");
option.value = "cool";
option.innerText = "beans";
one.appendChild(option);
two.appendChild(option);
};
结果:
我可以实现让这一个option
元素的内容出现在两个select
列表中的预期结果,但这需要我创建两个不同的option
元素,并使它们的数据相同。
有没有一种方法可以在 Javascript 中仅使用一个选项元素来完成此操作?
此外,这是我为此编写的 CodePen 的链接:CodePen
解决方案
你不能。一个元素只能有一个父元素,因此要将相同option
元素添加到两个不同select
的列表中,您必须复制option
.
MDN 上appendChild
的文档是这样说的:
Node.appendChild() 方法将一个节点添加到指定父节点的子节点列表的末尾。如果给定的子节点是对文档中现有节点的引用,则 appendChild() 将其从当前位置移动到新位置(不需要在将节点附加到其他节点之前将其从其父节点中删除)。
这意味着一个节点不能同时位于文档的两个点。因此,如果节点已经有父节点,则首先删除该节点,然后将其附加到新位置。Node.cloneNode() 方法可用于在将节点附加到新父节点之前制作节点的副本。请注意,使用 cloneNode 制作的副本不会自动保持同步。
因此,您的代码将附加option
到第一个select
,然后将其移动到第二个。您可以克隆option
以将其放入两个select
元素中。
推荐阅读
- c++ - 为什么包含需要进一步的依赖?
- sql - SQL CASE WHEN THEN 计算列类型的逻辑
- c# - 创建变量时会发生什么?
- sql - 如何存储 SQL Server 中给出的 NUMERIC 值
- azure-stream-analytics - Azure 流分析作业挂起或不处理输入
- javascript - 如何在 VueJS 中单击按钮 B 时启用按钮 A?
- magento - Magento 分页无法正常工作
- triggers - 我的点击触发器总是在谷歌标签管理器中触发
- autodesk-viewer - 在 viewer.loadModel 方法中使用 options.ids 参数来选择模型中的对象子集
- c# - 在 DbContext 初始化时捕获异常