js操作table元素实现表格行列新增、删除技巧总结
网络编程 2021-07-04 21:03www.168986.cn编程入门
这篇文章主要介绍了js操作table元素实现表格行列新增、删除技巧,以实例形式分析了JavaScript针对table表格进行行列的增加与删除相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了js操作table元素实现表格行列新增、删除的方法。分享给大家供大家参考,具体如下
/ TableTool.js 快速索引 表格行、列删除 【一】、 doTableRowDelete 说明默认根据当前事件指向的对象,向上寻找TR,进行删除(可选参数表格对象;删除的行的行号,按升序方式以逗号分割,如2,3,5;向上遍历TD几次,默认为1次) 合并表格 【一】、 conbainTableRow 说明纵向单元格的内容相同的合并,传入表格对象,需要合并的列,(可选的参数,从第几行开始); 【二】、 bineCell 说明横向单元格合并,传入单元格内一对象,(可选的参数,合并几个单元格<向右>;是否保留原单元格的值); 单元格与行的移动 【一】、 moveUp 说明进行上移,(可选参数,最上移动到第几行,默认为第零行;需要移动的行或者td对象或者td内的子对象,默认获取当前事件指向的行) 【二】、 moveDown 说明进行下移,(可选参数,最低移动到倒数第几行,默认为倒数第零行;需要移动的行或者td对象或者td内的子对象,默认获取当前事件指向的行) 【三】、 moveCell 说明行交换,表格对象、交换的行的行号 赋值单元格样式 【一】、 cloneStyle 说明将模板单元格的样式COPY到目标单元格上,模板单元格,要修正样式的单元格 新增行、列 【一】、 insertTableRow 说明新增行,表格对象,添加行的内容的数组(可选参数,每个单元格的colSpan的数组参数,默认取前一行的属性; 添加到的行的行号,默认是一行) 【二】、 insertTableCol 说明新增列,表格对象,添加行的内容的数组(可选参数,每个单元格的rowSpan的数组参数,默认取前一列的属性;添加到的列的列号,默认是一列) 获取表格中一行的元素 【一】、 doGetRowObj 说明 获取表格中行内的元素 ,表格对象,行号,(可选参数,是否copy对象,默认为false;是否获取单元格对象,默认false) 其他验证与参数获取 【一】、 doFetchBaseCols 说明获取列号在表格内行中的实际位置,表格对象,列号;返回一个数组,记录每行中指定的单元格的cellIndex 【二】、 doFetchEffectCells 说明获取插入当前行,被影响到rowSpan属性的单元格集合 【三】、 calculateSpanWidth 说明计算Span的宽度,根据当前span外的单元格的宽度,(可选参数容器对象,容器对象为空时,取当前document,即遍历页面上所有的Span对象) / / 删除表格的行 tdCount 根据当前event事件向上追溯TD对象几次,默认为1次 说明event事件需要附着在将要删除的TD内部,且不能有多重TD的嵌套;否则需要指定嵌套几层TD对象 / function doTableRowDelete(){ var tablObj = arguments[0]; var trIndexs = arguments[1]; var tdCount = arguments[2]==undefined?1:parseFloat(arguments[2]); if(trIndexs==undefined){ tdCount = tdCount-1; var tdObj = event.srcElement; var trObj,tableObj; while(tdCount > 0){ tdCount--; while(tdObj.tagName != 'TD'){ tdObj = tdObj.parentNode; } tdObj = tdObj.parentNode; } while(tdObj.tagName != 'TD'){ tdObj = tdObj.parentNode; } trObj = tdObj.parentNode; tableObj = trObj.parentNode; if(tableObj.tagName != 'TABLE'){ tableObj = tableObj.parentNode; } var cellIndex = tdObj.cellIndex; var rowIndex = trObj.rowIndex; var effectCells = doFetchEffectCells(tableObj,rowIndex); for(var i=0;i<effectCells.length;i++){ effectCells[i].rowSpan = effectCells[i].rowSpan - 1; } tableObj.deleteRow(rowIndex); }else{ var delIndexArr = trIndexs.split(","); for(var i=delIndexArr.length-1;i>-1;i--){ tablObj.deleteRow(delIndexArr[i]); } } isDeleteFlag = true; return isDeleteFlag; } / 删除表格的列 tdCount 根据当前event事件向上追溯TD对象几次,默认为1次 说明event事件需要附着在将要删除的TD内部,且不能有多重TD的嵌套;否则需要指定嵌套几层TD对象 / function doTableColDelete(){ var isDeleteFlag = false; var tdCount = arguments[0]==undefined?1:parseFloat(arguments[0]); var tdObj = event.srcElement; while(tdCount!=0){ tdCount--; while(tdObj.tagName != 'TD'){ tdObj = tdObj.parentNode; } } var trObj = tdObj.parentNode; var tableObj = trObj.parentNode; var cellIndex = tdObj.cellIndex; var rowIndex = trObj.rowIndex; tableObj.deleteRow(rowIndex); isDeleteFlag = true; return isDeleteFlag; } / 根据Span外最临近的TD的宽度计算重置当前Span的宽度 obj 可以是页面上一个容器对象,TR、TD、TABLE,此项为空,则会遍历页面上所有的Span对象 / function calculateSpanWidth(){ var obj = arguments[0]; var spanObjs; if(obj!=undefined){ spanObjs = obj.getElementsByTagName('span'); }else{ spanObjs = document.getElementsByTagName('span'); } for(var i=0;i<spanObjs.length;i++){ var tdObj = spanObjs[i].parentNode; while(tdObj.tagName!='TD'&&typeof(tdObj)=='Object'){ tdObj = tdObj.parentNode; } if(tdObj.tagName=='TD'){ var offsetWidth = tdObj.offsetWidth; spanObjs[i].style.width = offsetWidth-5; } } } / 合并表格中纵向相邻单元格的内容相同的项 tableObj 表格对象(必须) bainCols 需要合并的列 (格式从小到大,连续的用-分割,独立的用逗号; 例如1-5,7,9) beginRowIndex 从第几行开始合并, 默认从第零行开始 / function conbainTableRow(){ var tableObj = arguments[0]; var bainCols = arguments[1]; var beginRowIndex = arguments[2]==undefined?0:arguments[2]; //var beginColIndex = arguments[3]==undefined?0:arguments[3]; var colsArr = bainCols.split(","); var cols = new Array(); var index = 0; for(var i=0;i<colsArr.length;i++){ var indexChar = colsArr[i].indexOf("-"); if(indexChar!=-1){ var beginIndex = parseInt(colsArr[i].substring(0,indexChar)); var endIndex = parseInt(colsArr[i].substring(indexChar+1)); for(var j=beginIndex;j<=endIndex;j++){ cols[index++] = j; } } else{ cols[index++] = parseInt(colsArr[i]); } } if(tableObj.rows.length>beginRowIndex){ var modelArr = new Array(); for(var i=beginRowIndex;i<tableObj.rows.length;i++){ var row = tableObj.rows[i]; for(var k=cols.length-1;k>=0;k--){ var j = cols[k]; if(modelArr[j]==undefined){ modelArr[j] = row.cells[j]; }else{ if(row.cells[j].outerText == modelArr[j].outerText){ modelArr[j].rowSpan = modelArr[j].rowSpan + 1; row.deleteCell(j); }else{ modelArr[j] = row.cells[j]; } } } } } } / 行上移 minRowIndex 向上移动到的最小行号,默认时零 Elm 可以缺省,如果当前需要移动的行与激发本函数的位置有比较复杂的关系时,需要自行指名tr对象或者当前行的td对象传入 返回,移动成功返回true,如果当前时第minRowIndex行则返回false / function moveUp(){ //传入的对象 var minRowIndex = arguments[0]==undefined?0:arguments[0]; //传入的对象 var Elm = arguments[1]; //返回值 var isSuess = false; //表格对象 var myTable; if(Elm==undefined){ Elm=event.srcElement; } while(Elm&&Elm.tagName!="TR"){ Elm=Elm.parentElement; } //当前行号 var x = Elm.rowIndex; //获取表格对象 myTable = Elm.parentElement; if(myTable.tagName!='TABLE'){ myTable = myTable.parentNode; } //移到上一行 if (x > minRowIndex){ moveCell(myTable, x, x-1); isSuess = true; } return isSuess; } / 行下移 minRowIndex 向下移动到表格的倒数几行,默认是零,即表格的一行 Elm 可以缺省,如果当前需要移动的行与激发本函数的位置有比较复杂的关系时,需要自行指名tr对象或者当前行的td对象传入 返回,移动成功返回true,如果当前时一行则返回false / function moveDown(){ //传入的对象 var minRowIndex = arguments[0]==undefined?0:arguments[0]; //传入的对象 var Elm = arguments[1]; //返回值 var isSuess = false; //表格对象 var myTable; if(Elm==undefined){ Elm=event.srcElement; } while(Elm&&Elm.tagName!="TR"){ Elm=Elm.parentElement; } //当前行号 var x = Elm.rowIndex; //获取表格对象 myTable = Elm.parentElement; if(myTable.tagName!='TABLE'){ myTable = myTable.parentNode; } var tableLength = myTable.rows.length; //移到下一行 if (x < tableLength-minRowIndex-1){ moveCell(myTable, x, x+1); isSuess = true; } return isSuess; } / 行交换,处理了checkbox丢值的问题 myTable 表格对象 a 行号 b 行号 / function moveCell(myTable, a, b){ var e2 = myTable.rows[a].all.tags("input"); var e3 = myTable.rows[b].all.tags("input"); var arr = []; //遍历a行的所有input控件 for(i = 0; i < e2.length; i++) { if(e2[i].type == "checkbox"){ //对所有checkbox控件添加到数组中 arr.push(e2[i], e2[i].checked); } } //遍历b行的所有input控件 for(i = 0; i < e3.length; i++) { if(e3[i].type == "checkbox"){ //对所有checkbox控件添加到数组中 arr.push(e3[i], e3[i].checked); } } myTable.moveRow(a, b); //对数组中所有元素获得对象并对引用的对象赋原值 while(arr.length > 0){ arr.shift().checked = arr.shift(); } } / 替换单元格的样式为传入的单元格样式 tdObj 模板单元格 targetTdObj 目标替换的单元格 / function cloneStyle(){ //单元格中对象 var tdObj = arguments[0]; //合并列数 var targetTdObj = arguments[1]; //克隆传入的对象 var tempObj = tdObj.cloneNode(false); //克隆目标对象 var targetHtml = targetTdObj.innerHTML; //横向合并的个数 var colspan = targetTdObj.colSpan; //纵向合并的个数 var rowspan = targetTdObj.rowSpan; //宽度 var width = targetTdObj.width; //行对象 var rowObj = tdObj.parentNode; //替换当前单元格 rowObj.replaceChild(tempObj, targetTdObj); //for(var i=0;i<targetObj.childNodes.length;i++){ // tempObj.appendChild(targetObj.childNodes[i]); /
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程