如何复制表的一行

时间:2012-05-23 04:59:57

标签: javascript html

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

例如:

<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>

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

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

谢谢&amp;问候 阿米特

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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>