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

javascript动态操作表格:新增、设置样式、删除、移动行
一、动态设置元素readonly属性时,js里面的readOnly一定要大写O

document.getElementById("id").readOnly=true;

二、动态给表插入行:

function addRow(){
  //动态插入一行,mediaMes是表对象
  var oRow1=mediaMes.insertRow(mediaMes.rows.length);

  //设置tr的id
  oRow1.id="tr"+thisId;

  //获得表总的行数
  var aRows=mediaMes.rows;

  //获得新添加行的列集合
  var aCells=oRow1.cells;

  //再新添加的行里面插入一个列
  var oCell1_1=aRows[oRow1.rowIndex].insertCell(aCells.length);

  //=================设置列的样式======================
  oCell1_1.align="center";
  var oStyle1 = oCell1_1.getAttribute("style");

  //Ie浏览器动态设置样式不能直接给行或列指定class属性

  //要先把样式放到一个对象的attribute里面,然后在把这个对象设置到行或列里面去
  // ie
     if(oStyle1 == "[object]") {
      oStyle1.setAttribute("cssText","border-right: 1px solid #003399;border-bottom: 1px solid #003399;");
        oCell1_1.setAttribute("style",oStyle1 );
     } else {
   oCell1_1.setAttribute("class","td_border" );
     }
  var cell1="<input type='text' name="user"  id='user'/>";
  oCell1_1.innerHTML=cell1;
}


三、
       function delRow(rowId){
var poss=document.getElementById(rowId);
mediaMes.deleteRow(poss.rowIndex);
}

四、动态移动table里面的行(tr)

  // 先获得当前行的父节点,就是table

   var parent=aRows[sort].parentNode;

  //table移除一个行,返回的对象就是被移除的行
   var orgNode=parent.removeChild(aRows[sort+1]);
   var destNode=aRows[sort];

  //在一个行前面把这个行插入
   parent.insertBefore(orgNode,destNode);


1 楼 keshin 2009-04-23  
insertRow和insertCell这两个方法都是直接在dom中插入node,每次操作都会导致浏览器进行一次渲染页面的操作,数据量大的情况下性能表现不好。
而且insertRow(mediaMes.rows.length)这样的代码大可以用insertRow(-1)代替
2 楼 xhfei 2009-04-27  
keshin 写道

insertRow和insertCell这两个方法都是直接在dom中插入node,每次操作都会导致浏览器进行一次渲染页面的操作,数据量大的情况下性能表现不好。
而且insertRow(mediaMes.rows.length)这样的代码大可以用insertRow(-1)代替

谢谢提醒
3 楼 fcu 2009-05-19  
其实我没有看懂
4 楼 leisure 2009-06-15  
keshin 写道
insertRow和insertCell这两个方法都是直接在dom中插入node,每次操作都会导致浏览器进行一次渲染页面的操作,数据量大的情况下性能表现不好。
而且insertRow(mediaMes.rows.length)这样的代码大可以用insertRow(-1)代替


那有什么好的建议没?
因为目前我碰到了这个问题
5 楼 ninecat 2009-06-17  
使用createElement来替换insertRow和insertCell可以再一定程度上解决性能问题
例:
使用
var row = document.createElement("TR");
tbody.appendChild( row );
而不是
var row = tbody.insertRow();