【问题标题】:javascript cloneNode() doesn't work properlyjavascript cloneNode() 无法正常工作
【发布时间】:2020-03-10 08:06:38
【问题描述】:

我在 html 页面中有一个带有 id="a" 的选择元素(例如)。 我有一个名为 f() 的函数。 当我写的时候

$("#a").on("change",f);

它有效,这意味着每次我更改下拉列表中的选定值时,都会调用函数 f()。

我想将此选择复制到页面的另一个位置。 我有这个代码:

var oldSelect=$("#a")
var newSelect=oldSelect[0].cloneNode(true);
newSelect.id="b";
$("#b").on("change",f);

当我更改新下拉列表中的选定值时,不会调用函数 f()。

我尝试使用 chrome 的 devTools 对其进行调试,发现 $("#a") 是一种长度为 1 的数组,它首先具有选择本身。但是 $("#b") 没有包含选择本身的“0”属性。

有人知道为什么会这样吗?如何克隆一个包含所有选项和回调的选择元素?

【问题讨论】:

  • 你能试试这个吗? var newSelect = $("#a").clone(true);

标签: javascript jquery html clonenode jquery-clone


【解决方案1】:

虽然您克隆了现有的#a,但您还没有在您显示的代码中将其插入到文档中,因此$("#b") 不会给您任何回报。在使用$ 选择它之前插入它,例如:

$(container).append(newSelect);
$("#b").on("change",f);

其中container 是您要将新的<select> 附加到的元素。

或者直接将监听器添加到元素中,而不是再次选择它:

var newSelect=oldSelect.clone(true);
newSelect
  .prop('id', 'b')
  .on("change",f)
  .appendTo(container);

(请注意,在上面,newSelect 是一个 jQuery 集合,而不是一个 HTMLSelectElement。)

const f = () => console.log('change');

var oldSelect = $("#a");
oldSelect.on("change",f);

var newSelect = oldSelect.clone(true);
newSelect
  .prop('id', 'b')
  .on("change", f)
  .appendTo('#container');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
  <select id="a">
    <option>Option A</option>
    <option>Option B</option>
  </select>
</div>

【讨论】:

  • 如果我没有容器的 id 怎么办?这是一个 td (在表格内),我想把选择放在里面。表中的行是动态添加的,所以我不想给他们一个 id
  • 您不需要 ID,您只需要某种方式来选择要附加到的父级。任何有效的 CSS 选择器都可以,元素或 jQuery 集合中对 &lt;td&gt; 的引用也是如此。
  • 谢谢!将 on() 插入文档后移动它的建议有效!!
猜你喜欢
  • 2015-05-23
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 2012-12-18
相关资源
最近更新 更多