如何复制表的行

How to copy a row of a table

本文关键字:复制 何复制      更新时间:2023-09-26

我正在尝试复制元素树。在这个过程中,我必须更改一些参数,如名称,参数被传递给分配给原始元素的某个函数。如何设置元素的点击和其他方法。

例如:

<table>
 <tr>
  <td>
    <select name="abc(0)" onclick="func(0)">
      <option> 1</option>
    </select>
  </td>
  <td>
    <input type="text" onkeypress="keyp(0)" name="text(0)">
  </td>
 </tr>
</table>

我尝试了各种方法,例如克隆节点(true),并尝试重命名节点名称并尝试更改分配的方法参数。我也尝试通过 document.createElement 创建元素,但在 IE 中,它不会更改名称。在第二个选项中,它甚至没有设置名称。方法也没有改变,在第二种方法中,它甚至没有被分配。

有人可以让我知道我在哪里做错了。

谢谢和问候阿米特

我认为最好的选择是摆脱on_event_属性并重构您的 javascript,以便它改用事件侦听器。这样,处理事件的代码将与标记完全分开,克隆应该不会引起任何问题。

请注意,您必须使用委托事件,因为必须为最初在页面上不存在的克隆元素调用事件处理程序。

在 IE 中唯一不能更改的属性是已添加到窗体中的控件的类型,您可以更改其他所有内容。请注意,在所有浏览器中,克隆的元素都会保留内联侦听器,使用 attachEvent 添加侦听器的元素也是如此(所有库都用于支持 attachEvent 而不是 addEventListener 的浏览器)。

以下代码片段显示可以更改表单元素的 name 属性(在 IE 8 标准模式下测试),并为克隆的节点保留内联侦听器。

<form id="f0">
  <input type="text" name="inp0" onclick="alert(this.name);">
  <input type="button" value="Do clone" onclick="
    var el = this.form.inp0.cloneNode(true);
    this.form.appendChild(el);
    el.name = 'inp1';
  ">
</form>