[    首先说一下情况,我在我的jsp页面里面要实现了这样两个表格:左边的表格id为selectedtable,右边的表格id为toselecttable,这两个表格的行各自对应一组checkbox,selectedtable的checkbox.name=groupselected,toselecttable的checkbox.name=grouptoselect。现在需要通过checkbox实现将左右两边的表格的行在它们之间自由移动。我是通过add按钮和delete按钮来实现的这个功能,下面是这两个按钮对应的点击事件function:
[code=JScript]
function removeGroupsSlt(){
var selectedTable=document.getElementById("selectedtable");
var toSelectTable=document.getElementById("toselecttable");
var checksSlt=document.getElementsByName("groupselected");
for(i=checksSlt.length-1;i>=0;i--){
var selectedi=checksSlt[i];
if(selectedi.checked){
var selectedRow=selectedi.parentNode.parentNode;
var rowIndex=selectedRow.rowIndex;
var colsInRowSlt=selectedRow.childNodes;
var checkBoxHtml=colsInRowSlt[0].innerHTML;
checkBoxHtml=checkBoxHtml.replace(/groupselected/,"grouptoselect");
var nameHtml=colsInRowSlt[1].innerHTML;
var descriptionHtml=colsInRowSlt[2].innerHTML;
var addedTr=toSelectTable.insertRow();
selectedTable.deleteRow(rowIndex);
var cell1=addedTr.insertCell();
cell1.innerHTML=clone(chekBoxHtml);
alert(cell1.innerHTML);
var cell2=addedTr.insertCell();
cell2.innerHTML=clone(nameHtml);
var cell3=addedTr.insertCell();
cell3.innerHTML=clone(descriptionHtml);
alert("<td>"+checkBoxHtml+"</td><td>"+nameHtml+"</td><td>"+descriptionHtml+"</td>");
addedTr.innerHTML="<td>"+checkBoxHtml+"</td><td>"+nameHtml+"</td><td>"+descriptionHtml+"</td>";
// selectedi.name="grouptoselect";
// selectedi.checked=false;
// var selectedTr=selectedi.parentNode.parentNode;
// var toSltTableBody=toSelectTable.childNodes[0];
// toSltTableBody.appendChild(selectedi);
}
//alert(toSelectTable.innerHTML);
}
}function addGroupsSlt(){
try{
var selectedTable=document.getElementById("selectedtable");
var toSelectTable=document.getElementById("toselecttable");
var checksSlt=document.getElementsByName("grouptoselect");
for(i=checksSlt.length-1;i>=0;i--){
var selectedi=checksSlt[i];
if(selectedi.checked){
var selectedRow=selectedi.parentNode.parentNode;
var rowIndex=selectedRow.rowIndex;
var colsInRowSlt=selectedRow.childNodes;
var checkBoxHtml=colsInRowSlt[0].innerHTML;
checkBoxHtml=checkBoxHtml.replace(/groupselected/,"grouptoselect");
var nameHtml=colsInRowSlt[1].innerHTML;
var descriptionHtml=colsInRowSlt[2].innerHTML;
var addedTr=toSelectTable.insertRow();
addedTr.innerHTML="<tr><td>"+checkBoxHtml+"</td><td>"+nameHtml+"</td><td>"+descriptionHtml+"</td></tr>"
selectedTable.deleteRow(rowIndex);
// selectedi.name="groupselected";
// selectedi.checked=false;
// var selectedTr=selectedi.parentNode.parentNode;
// var sltTableBody=selectedTable.childNodes[0];
// sltTableBody.appendChild(selectedTr);
}
}
}catch(e){
alert(e);
}
//alert(selectedTable.innerHTML);
}[/
code]
    注释部分其实就是根据checkbox.name来获得所有checkbox,循环找到选中的,然后把选中的行直接append到另一张表里面去,问题是在这里需要将checkbox.name变换成另一组checkbox的name,做好后在firefox里面运行没问题,但在IE里面怎么都不行,好像是这里的checkbox.name是只读的,selectedi.name="groupselected"这句其实没起到任何作用,我就纳闷了,搞了半天不行。
    后来想了另一个方法,就是找到选中的行,然后一个一个获得里面的innerHTML,然后deleteRow(),在插入的表里调用insertRow(),并设置相关的innerHTML,但这个时候却报错,试了半天不行,先是取整个innerHTML再赋值不行,后来改用一个一个td的赋值,还是不行,我真没辙了,希望各位前辈不吝赐教,帮忙解答一下为什么此处checkbox的name不能设置,我在其他地方直接Object.name='aabb'用得蛮好的,这里就不行了,还有为什么我insertRow()也会出错?有没有什么更好的实现方法?为了方便提交,我是把每一行加了一个hidden的input,value就是id,然后将selectedtable映射到一个List里面做后台处理,所以这样实现。
    由于客户统一使用IE,所以在firefox里面实现了没用。
    小弟先在这里拜谢了!谢谢!