用JAVASCRIPT实现表格的编辑
2008-06-28 08:17
756 查看
ASPX的GRIDVIEW提供了丰富的编辑功能,但这些功能需要在服务器上实现再返回到客户端,不单占网络流量,还费时间,如果将生成编辑功能的实现部分在客户端实现,而只需更新时才发送数据到服务器,这样的客户体验更佳了,下面就我的一些实验写出来,与大家共讨论。在这个例子中,只是模拟了表格的编辑功能,并没有更新到服务器,如果使用AJAX方法进行更新,就可以完善了。如果将实现封装成一个类,在使用上就更方便了。
一、有关表格的一些JAVASCRIPT操作和其属性
二、实现的JAVASCRIPT操作
一、有关表格的一些JAVASCRIPT操作和其属性
集合 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
cells[] | 返回包含表格中所有单元格的一个数组。 | 5 | 1 | 1 | No |
rows[] | 返回包含表格中所有行的一个数组。 | 4 | 1 | 9 | Yes |
tBodies[] | 返回包含表格中所有 tbody 的一个数组。 | 4 | Yes |
方法 | 描述 | IE | F | O | W3C |
---|---|---|---|---|---|
createCaption() | 为表格创建一个 caption 元素。 | 4 | 1 | 9 | Yes |
createTFoot() | 在表格中创建一个空的 tFoot 元素。 | 4 | 1 | 9 | Yes |
createTHead() | 在表格中创建一个空的 tHead 元素。 | 4 | 1 | 9 | Yes |
deleteCaption() | 从表格删除 caption 元素以及其内容。 | 4 | 1 | 9 | Yes |
deleteRow() | 从表格删除一行。 | 4 | 1 | 9 | Yes |
deleteTFoot() | 从表格删除 tFoot 元素及其内容。 | 4 | 1 | 9 | Yes |
deleteTHead() | 从表格删除 tHead 元素及其内容。 | 4 | 1 | 9 | Yes |
insertRow() | 在表格中插入一个新行。 | 4 | 1 | 9 | Yes |
<script type="text/javascript"> //保存原先的值(取消时用到) var oldValue, preRowIndex=-1; //表格ID var tableID="myTable"; //按钮标题 var buttonTitle={ "modify": "修改", "save" : "保存", "delete": "删除", "cancel": "取消" } //插入行函数 function insertRow(){ var rowCount = document.getElementById(tableID).rows.length; var r = document.getElementById(tableID).insertRow(rowCount); var c = r.insertCell(0); var op = document.createElement("input"); //op.attributes["type"].value = "button"; op.type = "button"; op.attributes["value"].value = buttonTitle["delete"]; op.onclick=deleteRow; c.appendChild(op); op = document.createElement("input"); op.attributes["type"].value = "button"; op.attributes["value"].value = buttonTitle["modify"]; op.onclick = modifyRow; c.appendChild(op); c = r.insertCell(0); c.innerText = "Row " + (rowCount); } //修改,此按钮作修改与保存用,所以要判断标题 function modifyRow(){ var o = event.srcElement; var i = o.parentNode.parentNode.rowIndex; var r = document.getElementById(tableID).rows[i]; if (o.value==buttonTitle["modify"]){ _modify(r); } else { _save(r); } } //删除,此按钮作删除与取消用,所以判断标题 function deleteRow(){ var o = event.srcElement; var i = o.parentNode.parentNode.rowIndex; var r = document.getElementById(tableID).rows[i]; if (o.value==buttonTitle["delete"]){ _delete(r); } else { _cancel(r); } } //按钮状态变化 function _btnState(r,state){ if (state=="modify"){ r.cells[1].getElementsByTagName("input")[1].value = buttonTitle["save"]; r.cells[1].getElementsByTagName("input")[0].value = buttonTitle["cancel"]; } else { r.cells[1].getElementsByTagName("input")[0].value = buttonTitle["delete"]; r.cells[1].getElementsByTagName("input")[1].value=buttonTitle["modify"]; } } //删除行 function _delete(r){ if (confirm("确定要删除此行数据吗?")){ document.getElementById(tableID).deleteRow(r.rowIndex) } } //取消操作 function _cancel(r){ var c = r.cells[0]; c.removeChild(c.childNodes[0]); c.innerText = oldValue; _btnState(r,"cancel"); } //修改,在此行可修改前若有其他行处于修改状态,则将其他行的修改状态取消 function _modify(r){ if (preRowIndex > -1 && preRowIndex != r.rowIndex){ var r1 = document.getElementById(tableID).rows[preRowIndex]; var c1 = r1.cells[0]; c1.removeChild(c1.childNodes[0]); c1.innerText = oldValue; _btnState(r1,"cancel"); } var c = r.cells[0]; var value = c.innerText; oldValue = value; preRowIndex = r.rowIndex; c.removeChild(c.childNodes[0]); var op = document.createElement("input"); op.attributes["type"].value = "text"; op.attributes["value"].value = value; c.appendChild(op); _btnState(r,"modify"); } //保存 function _save(r){ var c = r.cells[0]; var value = c.childNodes[0].value; c.removeChild(c.childNodes[0]); c.innerText = value; _btnState(r,"save"); } </script>
三、整个HTML文件的代码
<html>
<head>
<script type="text/javascript"> //保存原先的值(取消时用到) var oldValue, preRowIndex=-1; //表格ID var tableID="myTable"; //按钮标题 var buttonTitle={ "modify": "修改", "save" : "保存", "delete": "删除", "cancel": "取消" } //插入行函数 function insertRow(){ var rowCount = document.getElementById(tableID).rows.length; var r = document.getElementById(tableID).insertRow(rowCount); var c = r.insertCell(0); var op = document.createElement("input"); //op.attributes["type"].value = "button"; op.type = "button"; op.attributes["value"].value = buttonTitle["delete"]; op.onclick=deleteRow; c.appendChild(op); op = document.createElement("input"); op.attributes["type"].value = "button"; op.attributes["value"].value = buttonTitle["modify"]; op.onclick = modifyRow; c.appendChild(op); c = r.insertCell(0); c.innerText = "Row " + (rowCount); } //修改,此按钮作修改与保存用,所以要判断标题 function modifyRow(){ var o = event.srcElement; var i = o.parentNode.parentNode.rowIndex; var r = document.getElementById(tableID).rows[i]; if (o.value==buttonTitle["modify"]){ _modify(r); } else { _save(r); } } //删除,此按钮作删除与取消用,所以判断标题 function deleteRow(){ var o = event.srcElement; var i = o.parentNode.parentNode.rowIndex; var r = document.getElementById(tableID).rows[i]; if (o.value==buttonTitle["delete"]){ _delete(r); } else { _cancel(r); } } //按钮状态变化 function _btnState(r,state){ if (state=="modify"){ r.cells[1].getElementsByTagName("input")[1].value = buttonTitle["save"]; r.cells[1].getElementsByTagName("input")[0].value = buttonTitle["cancel"]; } else { r.cells[1].getElementsByTagName("input")[0].value = buttonTitle["delete"]; r.cells[1].getElementsByTagName("input")[1].value=buttonTitle["modify"]; } } //删除行 function _delete(r){ if (confirm("确定要删除此行数据吗?")){ document.getElementById(tableID).deleteRow(r.rowIndex) } } //取消操作 function _cancel(r){ var c = r.cells[0]; c.removeChild(c.childNodes[0]); c.innerText = oldValue; _btnState(r,"cancel"); } //修改,在此行可修改前若有其他行处于修改状态,则将其他行的修改状态取消 function _modify(r){ if (preRowIndex > -1 && preRowIndex != r.rowIndex){ var r1 = document.getElementById(tableID).rows[preRowIndex]; var c1 = r1.cells[0]; c1.removeChild(c1.childNodes[0]); c1.innerText = oldValue; _btnState(r1,"cancel"); } var c = r.cells[0]; var value = c.innerText; oldValue = value; preRowIndex = r.rowIndex; c.removeChild(c.childNodes[0]); var op = document.createElement("input"); op.attributes["type"].value = "text"; op.attributes["value"].value = value; c.appendChild(op); _btnState(r,"modify"); } //保存 function _save(r){ var c = r.cells[0]; var value = c.childNodes[0].value; c.removeChild(c.childNodes[0]); c.innerText = value; _btnState(r,"save"); } </script>
</head>
<body>
<table width="436" border="1" id="myTable">
<thead>
<tr>
<th width="267">内容</th><th width="153">操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row 1</td>
<td><input type="button" value="删除" onClick="deleteRow(this)"><input name="button" type="button" onClick="modifyRow(this)" value="修改"></td>
</tr>
<tr>
<td>Row 2</td>
<td><input type="button" value="删除" onClick="deleteRow(this)"><input name="button2" type="button" onClick="modifyRow(this)" value="修改"></td>
</tr>
<tr>
<td>Row 3</td>
<td><input type="button" value="删除" onClick="deleteRow(this)"><input name="button3" type="button" onClick="modifyRow(this)" value="修改"></td>
</tr>
</tbody>
</table>
<div>
<input type="button" value="Insert Row" onClick="insertRow()">
</div>
<div id="rv">
</div>
</body>
</html>
相关文章推荐
- JavaScript实现在线编辑表格
- javascript(jquery)实现表格的编辑以及遮罩层的实现!
- javascript实现表格排序 编辑 拖拽 缩放
- JavaScript实现在线编辑表格
- JavaScript实现在线编辑表格
- javascript将table的td变为可编辑的input,实现表格动态编辑
- html+javascript实现可编辑表格
- JavaScript实现在线编辑表格
- javascript实现表格排序 编辑 拖拽 缩放
- JavaScript简单表格编辑功能实现方法
- Javascript实现表格行排序
- javascript 实现的表格斜线
- javascript学习实录 之七(实现鼠标移动上去后表格颜色变化) -- 刘小小尘
- 不用javascript实现带序号的表格隔行换色的效果
- Ajax实现可编辑的表格(实例)
- jquery 实现可编辑的表格
- 用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
- javascript可以编辑的表格
- JavaScript实现的数据表格:冻结列、调整列宽和客户端排序
- Javascript实现表格的全选框