华域联盟 JAVA js+Html实现表格可编辑操作

js+Html实现表格可编辑操作

本文实例为大家分享了js+Html实现表格可编辑操作的具体代码,供大家参考,具体内容如下

功能描述:单击页面使单元格td变成可编辑状态,输入内容后,当单元格失去焦点时,保存输入的内容。
点击增加行,在table的末尾增加一行;点击删除行,删除table中最末尾的一行。     

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
<title>编辑表格数据</title>  
<style type="text/css">  
<!--  
body,div,p,ul,li,font,span,td,th{  
font-size:10pt;  
line-height:155%;  
}  
table{  
border-top-width: 1px;  
border-right-width: 1px;  
border-bottom-width: 0px;  
border-left-width: 1px;  
border-top-style: solid;  
border-right-style: solid;  
border-bottom-style: none;  
border-left-style: solid;  
border-top-color: #CCCCCC;  
border-right-color: #CCCCCC;  
border-bottom-color: #CCCCCC;  
border-left-color: #CCCCCC;  
}  
td{  
border-bottom-width: 1px;  
border-bottom-style: solid;  
border-bottom-color: #CCCCCC;  
}  
.EditCell_TextBox {  
width: 90%;  
border:1px solid #0099CC;  
}  
.EditCell_DropDownList {  
width: 90%;  
}  
-->  
</style>  
<script>
/** 
* JS实现可编辑的表格   
* 用法:EditTables(tb1,tb2,tb2,......); 
**/  
//设置多个表格可编辑  
function EditTables(){  
for(var i=0;i<arguments.length;i++){  
SetTableCanEdit(arguments[i]);  
}  
}  
//设置表格是可编辑的  
function SetTableCanEdit(table){  
for(var i=1; i<table.rows.length;i++){  
SetRowCanEdit(table.rows[i]);  
}  
}  
function SetRowCanEdit(row){  
for(var j=0;j<row.cells.length; j++){  
//如果当前单元格指定了编辑类型,则表示允许编辑  
var editType = row.cells[j].getAttribute("EditType");  
if(!editType){  
//如果当前单元格没有指定,则查看当前列是否指定  
editType = row.parentNode.rows[0].cells[j].getAttribute("EditType");  
}  
if(editType){  
row.cells[j].onclick = function (){  
EditCell(this);  
}  
}  
}  
}  
//设置指定单元格可编辑  
function EditCell(element, editType){  
var editType = element.getAttribute("EditType");  
if(!editType){  
//如果当前单元格没有指定,则查看当前列是否指定  
editType = element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("EditType");  
}  
switch(editType){  
case "TextBox":  
CreateTextBox(element, element.innerHTML);  
break;  
case "DropDownList":  
CreateDropDownList(element);  
break;  
default:  
break;  
}  
}  
//为单元格创建可编辑输入框  
function CreateTextBox(element, value){  
//检查编辑状态,如果已经是编辑状态,跳过  
var editState = element.getAttribute("EditState");  
if(editState != "true"){  
//创建文本框  
var textBox = document.createElement("INPUT");  
textBox.type = "text";  
textBox.className="EditCell_TextBox";  
//设置文本框当前值  
if(!value){  
value = element.getAttribute("Value");  
}    
textBox.value = value;  
//设置文本框的失去焦点事件  
textBox.onblur = function (){  
CancelEditCell(this.parentNode, this.value);  
}  
//向当前单元格添加文本框  
ClearChild(element);  
element.appendChild(textBox);  
textBox.focus();  
textBox.select();  
//改变状态变量  
element.setAttribute("EditState", "true");  
element.parentNode.parentNode.setAttribute("CurrentRow", element.parentNode.rowIndex);  
}  
}  
//为单元格创建选择框  
function CreateDropDownList(element, value){  
//检查编辑状态,如果已经是编辑状态,跳过  
var editState = element.getAttribute("EditState");  
if(editState != "true"){  
//创建下接框  
var downList = document.createElement("Select");  
downList.className="EditCell_DropDownList";  
//添加列表项  
var items = element.getAttribute("DataItems");  
if(!items){  
items = element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("DataItems");  
}  
if(items){  
items = eval("[" + items + "]");  
for(var i=0; i<items.length; i++){  
var oOption = document.createElement("OPTION");  
oOption.text = items[i].text;  
oOption.value = items[i].value;  
downList.options.add(oOption);  
}  
}  
//设置列表当前值  
if(!value){  
value = element.getAttribute("Value");  
}  
downList.value = value;  
//设置创建下接框的失去焦点事件  
downList.onblur = function (){  
CancelEditCell(this.parentNode, this.value, this.options[this.selectedIndex].text);  
}  
//向当前单元格添加创建下接框  
ClearChild(element);  
element.appendChild(downList);  
downList.focus();  
//记录状态的改变  
element.setAttribute("EditState", "true");  
element.parentNode.parentNode.setAttribute("LastEditRow", element.parentNode.rowIndex);  
}  
}  
//取消单元格编辑状态  
function CancelEditCell(element, value, text){  
element.setAttribute("Value", value);  
if(text){  
element.innerHTML = text;  
}else{  
element.innerHTML = value;  
}  
element.setAttribute("EditState", "false");  
//检查是否有公式计算  
CheckExpression(element.parentNode);  
}  
//清空指定对象的所有字节点  
function ClearChild(element){  
element.innerHTML = "";  
}  
//添加行  
function AddRow(table, index){  
var lastRow = table.rows[table.rows.length-1];  
var newRow = lastRow.cloneNode(true);  
//计算新增加行的序号,需要引入jquery 的jar包
var startIndex = $.inArray(lastRow,table.rows);
var endIndex = table.rows; 
table.tBodies[0].appendChild(newRow);  
newRow.cells[0].innerHTML=endIndex-startIndex;
SetRowCanEdit(newRow);  
return newRow;  
}  
//删除行  
function DeleteRow(table, index){  
for(var i=table.rows.length - 1; i>0;i--){  
var chkOrder = table.rows[i].cells[0].firstChild;  
if(chkOrder){  
if(chkOrder.type = "CHECKBOX"){  
if(chkOrder.checked){  
//执行删除  
table.deleteRow(i);  
}  
}  
}  
}  
}  
//提取表格的值,JSON格式  
function GetTableData(table){  
var tableData = new Array();  
alert("行数:" + table.rows.length);  
for(var i=1; i<table.rows.length;i++){  
tableData.push(GetRowData(tabProduct.rows[i]));  
}  
return tableData;  
}  
//提取指定行的数据,JSON格式  
function GetRowData(row){  
var rowData = {};  
for(var j=0;j<row.cells.length; j++){  
name = row.parentNode.rows[0].cells[j].getAttribute("Name");  
if(name){  
var value = row.cells[j].getAttribute("Value");  
if(!value){  
value = row.cells[j].innerHTML;  
}  
rowData[name] = value;  
}  
}  
//alert("ProductName:" + rowData.ProductName);  
//或者这样:alert("ProductName:" + rowData["ProductName"]);  
return rowData;  
}  
//检查当前数据行中需要运行的字段  
function CheckExpression(row){  
for(var j=0;j<row.cells.length; j++){  
expn = row.parentNode.rows[0].cells[j].getAttribute("Expression");  
//如指定了公式则要求计算  
if(expn){  
var result = Expression(row,expn);  
var format = row.parentNode.rows[0].cells[j].getAttribute("Format");  
if(format){  
//如指定了格式,进行字值格式化  
row.cells[j].innerHTML = formatNumber(Expression(row,expn), format);  
}else{  
row.cells[j].innerHTML = Expression(row,expn);  
}  
}  
}  
}  
//计算需要运算的字段  
function Expression(row, expn){  
var rowData = GetRowData(row);  
//循环代值计算  
for(var j=0;j<row.cells.length; j++){  
name = row.parentNode.rows[0].cells[j].getAttribute("Name");  
if(name){  
var reg = new RegExp(name, "i");  
expn = expn.replace(reg, rowData[name].replace(/\,/g, ""));  
}  
}  
return eval(expn);  
}  
///  
/** 
* 格式化数字显示方式   
* 用法 
* formatNumber(12345.999,'#,##0.00'); 
* formatNumber(12345.999,'#,##0.##'); 
* formatNumber(123,'000000'); 
* @param num 
* @param pattern 
*/  
/* 以下是范例 
formatNumber('','')=0 
formatNumber(123456789012.129,null)=123456789012 
formatNumber(null,null)=0 
formatNumber(123456789012.129,'#,##0.00')=123,456,789,012.12 
formatNumber(123456789012.129,'#,##0.##')=123,456,789,012.12 
formatNumber(123456789012.129,'#0.00')=123,456,789,012.12 
formatNumber(123456789012.129,'#0.##')=123,456,789,012.12 
formatNumber(12.129,'0.00')=12.12 
formatNumber(12.129,'0.##')=12.12 
formatNumber(12,'00000')=00012 
formatNumber(12,'#.##')=12 
formatNumber(12,'#.00')=12.00 
formatNumber(0,'#.##')=0 
*/  
function formatNumber(num,pattern){    
var strarr = num?num.toString().split('.'):['0'];    
var fmtarr = pattern?pattern.split('.'):[''];    
var retstr='';    
// 整数部分    
var str = strarr[0];    
var fmt = fmtarr[0];    
var i = str.length-1;      
var comma = false;    
for(var f=fmt.length-1;f>=0;f--){    
switch(fmt.substr(f,1)){    
case '#':    
if(i>=0 ) retstr = str.substr(i--,1) + retstr;    
break;    
case '0':    
if(i>=0) retstr = str.substr(i--,1) + retstr;    
else retstr = '0' + retstr;    
break;    
case ',':    
comma = true;    
retstr=','+retstr;    
break;    
}    
}    
if(i>=0){    
if(comma){    
var l = str.length;    
for(;i>=0;i--){    
retstr = str.substr(i,1) + retstr;    
if(i>0 && ((l-i)%3)==0) retstr = ',' + retstr;     
}    
}    
else retstr = str.substr(0,i+1) + retstr;    
}    
retstr = retstr+'.';    
// 处理小数部分    
str=strarr.length>1?strarr[1]:'';    
fmt=fmtarr.length>1?fmtarr[1]:'';    
i=0;    
for(var f=0;f<fmt.length;f++){    
switch(fmt.substr(f,1)){    
case '#':    
if(i<str.length) retstr+=str.substr(i++,1);    
break;    
case '0':    
if(i<str.length) retstr+= str.substr(i++,1);    
else retstr+='0';    
break;    
}    
}    
return retstr.replace(/^,+/,'').replace(/\.$/,'');    
}  
</script>
</head>  
<body>  
<form id="form1" name="form1" method="post" action="">  
<h3>可编辑的表格</h3>  
<table width="698" border="0" cellpadding="0" cellspacing="0" id="tabProduct">  
<tr>  
<td width="32" align="center" bgcolor="#EFEFEF" Name="Num"><input type="checkbox" name="checkbox" value="checkbox" /></td>  
<td width="186" bgcolor="#EFEFEF" Name="Num" EditType="TextBox">序号</td>  
<td width="152" bgcolor="#EFEFEF" Name="ProductName" EditType="DropDownList" DataItems="{text:'A',value:'a'},{text:'B',value:'b'},{text:'C',value:'c'},{text:'D',value:'d'}">商品名称</td>  
<td width="103" bgcolor="#EFEFEF" Name="Amount" EditType="TextBox">数量</td>  
<td width="103" bgcolor="#EFEFEF" Name="Price" EditType="TextBox">单价</td>  
<td width="120" bgcolor="#EFEFEF" Name="SumMoney" Expression="Amount*Price" Format="#,###.00">合计</td>  
</tr>  
<tr>  
<td align="center" bgcolor="#FFFFFF"><input type="checkbox" name="checkbox2" value="checkbox" /></td>  
<td bgcolor="#FFFFFF">1</td>  
<td bgcolor="#FFFFFF" Value="c">C</td>  
<td bgcolor="#FFFFFF">0</td>  
<td bgcolor="#FFFFFF">0</td>  
<td bgcolor="#FFFFFF">0</td>  
</tr>  
<tr>  
<td align="center" bgcolor="#FFFFFF"><input type="checkbox" name="checkbox22" value="checkbox" /></td>  
<td bgcolor="#FFFFFF">2</td>  
<td bgcolor="#FFFFFF" Value="d">D</td>  
<td bgcolor="#FFFFFF">0</td>  
<td bgcolor="#FFFFFF">0</td>  
<td bgcolor="#FFFFFF">0</td>  
</tr>  
</table>  
<br />  
<input type="button" name="Submit" value="新增" onclick="AddRow(document.getElementById('tabProduct'),1)" />  
<input type="button" name="Submit2" value="删除" onclick="DeleteRow(document.getElementById('tabProduct'),1)" />  
<input type="button" name="Submit22" value="重置" onclick="window.location.reload()" />  
<input type="submit" name="Submit3" value="提交" onclick="GetTableData(document.getElementById('tabProduct'));return false;" />  
</form>  
<script language="javascript" src="GridEdit.js"></script>  
<script language="javascript">  
var tabProduct = document.getElementById("tabProduct");  
// 设置表格可编辑  
// 可一次设置多个,例如:EditTables(tb1,tb2,tb2,......)  
EditTables(tabProduct);  
</script>  
</body>  
</html> 

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

您可能感兴趣的文章:

本文由 华域联盟 原创撰写:华域联盟 » js+Html实现表格可编辑操作

转载请保留出处和原文链接:https://www.cnhackhy.com/59870.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部