日期:2014-05-16  浏览次数:20354 次

appendChild的一个奇怪问题,大家来看看
有一个table,我想克隆一行然后修改table里面的元素名称,然后直接把新克隆的行append到table最后一行,代码如下:

<script>
var   count   =1;
function   aa(){
var   testTb   =   document.getElementById( "testTb ");
var   firstRow   =   testTb.rows[0].parentNode.cloneNode(true);

testTb.appendChild(firstRow);

firstRow.childNodes[0].cells[0].childNodes[0].name=   "privateCatalog[1].cataId ";

var   element   =   form1[ "privateCatalog[0].cataId "];
for(i   =   0;i   <element.length;i++)
alert(element[i].name);
}

</script>
<body>
<form   id= "form1 "   name= "form1 "   method= "post "   action= " ">
    <table   id= "testTb "   width= "100% "   border= "0 ">
        <tbody>
        <tr>
            <td> <input   onclick= "aa() "   type= "text "   name= "privateCatalog[0].cataId "/> </td>
        </tr>
</tbody>

    </table>
</form>
</body>

代码还是不长的,呵呵
说明下
firstRow.childNodes[0].cells[0].childNodes[0].name=   "privateCatalog[1].cataId ";
是吧克隆后行里面的text域付给一个新的名字叫 "privateCatalog[1].cataId ",
以示和原来的 "privateCatalog[0].cataId "区别;
然后我var   element   =   form1[ "privateCatalog[0].cataId "];
这段代码居然返回的是一个数组?!!
更奇怪的是这个数组的第一个元素的name是privateCatalog[0].cataId
第二个元素的name是privateCatalog[1].cataId
??
咋会这样呢?我明明取的是privateCatalog[0].cataId元素啊,咋会返回来两个不同的,而且还是数组!!
有谁遇见过这样的怪事啊??
还有,这个问题在firefox下面不存在,返回的就是当前的privateCatalog[0].cataId元素

------解决方案--------------------
如果不行你可以给这几个input 加上id属性 操作方法和name一样 只是提交时是以name为准
<input onclick= "aa() " type= "text " id= "input1 " name= "privateCatalog[0].cataId "/>
var element = form1[ "input1 "];