首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

怎么删除表格中间插入行

2012-02-05 
如何删除表格中间插入行JScript codefunction addRow(obj) {var num obj.value//num是提交的件数var be

如何删除表格中间插入行

JScript code
 
function addRow(obj) {
    var num = obj.value;  //num是提交的件数
    var beginRow = obj.parentElement.parentElement.rowIndex;
    var theTable = document.getElementById("fillTbl");
    var dRow = document.getElementsByTagName("tr");
    //alert(dRow.length);
    if (dRow.length>0) {
    for (var j=0; j <dRow.length; j++) {
        if ("addCls" == dRow[j].name||"addClass" == dRow[j].className) {
        theTable.deleteRow(dRow[j].rowIndex);
        }
    }
    }
    dRow = document.getElementsByTagName("td");
    if (dRow.length>0) {
    for (j=0; j <dRow.length; j++) {
        if ("addCls" == dRow[j].name) {
        theTable.deleteRow(dRow[j].parentElement.rowIndex);
        }
    }
    }
    dRow  = document.getElementsByTagName("font");
    if (dRow.length>0) {
    for (j=0; j <dRow.length; j++) {
        if ("addCls" == dRow[j].name) {
        theTable.deleteRow(dRow[j].parentElement.parentElement.rowIndex);
        if ("tr" == dRow[j].parentElement.parentElement.parentElement.tagName) {
            //alert(dRow[j].parentElement.parentElement.parentElement.tagName);
            theTable.deleteRow(dRow[j].parentElement.parentElement.parentElement.rowIndex);
        }
        }
    }
    }
    var cellidx;
    var newCell;
    var newRow;
    if (num>1) {
    for (var i=num; i>=1; i--) {
    // append new row to the end of the table
    newRow = theTable.insertRow(beginRow+1); //theTable.rows.length);
    // give the row its own ID
    newRow.id = newRow.uniqueID;
    newRow.name = "addCls";  // 为了修改件数可以删除添加的行,我用addCls作为name识别
    newRow.className = "addClass";  //同样是为了删除下面添加的行,因为有2行就是删不掉
    cellidx=0;
    // an inserted row has no cells, so insert the cells
    newCell = newRow.insertCell(cellidx);
    newRow.bgcolor="#E7EDF5";
    newRow.colspan="5";
    // give this cell its own id
    newCell.name = "addCls";
    // display the row’s id as the cell text
    newCell.align="center";
    newCell.colspan="5";
    newCell.bgcolor="#E7EDF5";
    newCell.innerHTML = " <font name='addCls' color='#2D486C'>第"+i+"件的信息 </font>";
    newRow = theTable.insertRow(beginRow+2); //theTable.rows.length);
    newRow.className = "addClass";
    newRow.id = newRow.uniqueID;
    newRow.name = "addCls";
    cellidx = 0;
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.innerHTML =" <img src='image/weight.jpg'>";
    cellidx++;
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";


    newCell.innerHTML =" <input type='text' name='weightPart[]'>";
    cellidx++;
    newCell.TagName = "td";
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.innerHTML =" <img src='image/volume.jpg'>";
    cellidx++;
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.colspan = "2";
    newCell.innerHTML =" <input size='36' type='text' name='volPart[]'>";
    newRow = theTable.insertRow(beginRow+3); //theTable.rows.length);
    newRow.className = "addClass";
    newRow.id = newRow.uniqueID;
    cellidx = 0;
    newRow.name = "addCls";
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.innerHTML =" <img src='image/descriptionEn.jpg'>";
    cellidx++;
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.innerHTML =" <input type='text' name='dEnPart[]'>";
    cellidx++;
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.id = newCell.uniqueID;
    newCell.innerHTML =" <img src='image/descriptionChn.jpg'>";
    cellidx++;
    newCell = newRow.insertCell(cellidx);
    newCell.name = "addCls";
    newCell.colspan = "2";
    newCell.innerHTML =" <input size='36' type='text' name='dChnPart[]'>";
    }
    }
}


选了9件,再改成2件,这样的话,后7件的填写框就要删除。但有2行就是删不掉,显示为:“第4件的信息”和“第8件的信息”这2行删不掉。请高手解决。调试通过给分。JS或AJAX实现都可以,3Q。


以下的行有2行删不掉。
JScript code
newRow = theTable.insertRow(beginRow+1); //theTable.rows.length);    // give the row its own ID    newRow.id = newRow.uniqueID;    newRow.name = "addCls";    newRow.className = "addClass";    cellidx=0;    // an inserted row has no cells, so insert the cells    newCell = newRow.insertCell(cellidx);    newRow.bgcolor="#E7EDF5";    newRow.colspan="5";    // give this cell its own id    newCell.name = "addCls";    // display the row’s id as the cell text    newCell.align="center";    newCell.colspan="5";    newCell.bgcolor="#E7EDF5";    newCell.innerHTML = "<font name='addCls' color='#2D486C'>第"+i+"件的信息</font>";



HTML页面代码:
HTML code
<form name="form1" method="post" action="insert.php"><table border="1" cellspacing="0" id="fillTbl"><tr>  <td><img src="image/destination.jpg"></td>  <td><input name="destination" type="text" id="destination" value="<?PHP  if (1==$label){    echo mysql_result($result,0,"destination");  } ?>"></td>  <td><font size=2>是否一票多件(如果是请选择件数,并填写每件的信息)</font></td>  <td colspan="2"><input type="radio" name="mul" id="mulY" value="Yes">      <label for="mulY">Yes</label>      <input type="radio" name="mul" id="mulN" value="No" checked>      <label for="mulN">No</label><font size=2 color="#CC3366">&nbsp;&nbsp;件数:</font>          <select name="pNum" onchange="addRow(this)">          <option value="1" selected>1</option>          <option value="2">2</option>          <option value="3">3</option>          <option value="4">4</option>          <option value="5">5</option>          <option value="6">6</option>          <option value="7">7</option>          <option value="8">8</option>          <option value="9">9</option>          <option value="10">10</option>          </select>          </td></tr><tr><td>这里还有几行,插入的行在中间位置,所以不能从表格末尾删除。</td></tr></table> 



[解决办法]
从最大值开始倒着删
[解决办法]
用一个变量rowinsert记录刚才插入的行数,然后删除的时候从第一行开始删除指定刚才插入的数量rowinsert即可.

更好点的算法就是判断当前要插入是大于刚才的数字还是小于,大于的话从第rowinsert+1开始插入num-rowinsert行.小于的话从num+1删除rowinsert-num行
[解决办法]
用一个变量rowinsert记录刚才插入的行数,然后删除的时候从第一行开始删除指定刚才插入的数量rowinsert即可. 

更好点的算法就是判断当前要插入是大于刚才的数字还是小于,大于的话从第rowinsert开始插入num-rowinsert行.小于的话从num删除rowinsert-num行

由于row集合下标从0开始的所以不用加1的。
[解决办法]
theTable.innerText=""就能删除所有行了
[解决办法]
这个简单的,使用一个中间变量的或者使用COOKIE
[解决办法]
中间变量保存上一次选的值,然后利用新的值与该中间变量比较
[解决办法]
一个全局变量
[解决办法]
学习!
[解决办法]
JScript code
[Quote=引用:]select的选择值改变,如何记录上一次选的值呢?如果知道就好办,大家出出主意,3Q[/Quote]你在页面定义一个变量就可以了.var rowinsert=0;function addRow(obj) {   var num = obj.value;  //num是提交的件数   var beginRow = obj.parentElement.parentElement.rowIndex;   var theTable = document.getElementById("fillTbl");   var dRow = document.getElementsByTagName("tr");   insertrow = num - rowinsert//取得要插入或删除的行数   rowinsert = num //记录新选择的值供下次使用   if(insertrow==0)return //如果没变化则返回   if(insertrow<0){      //小于0即删除,则从num开始删除Math.abs(insertrow)行      for(i=num;i<(num+Math.abs(insertrow));i++)         theTable.deleteRow(i)   }else{      //大于0即插入,从num-insertrow开始插入insertrow行       for(i=num-insertrow;i<num;i++)         //执行插入   }} 

热点排行