`
originwxit
  • 浏览: 54488 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转)JS实现可编辑的表格

阅读更多
来自网络:这个不错,就转了收藏。
http://apps.hi.baidu.com/share/detail/30648462


html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<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>
</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>


GridEdit.js   js代码
/**
* JS实现可编辑的表格  
* 用法:EditTables(tb1,tb2,tb2,......);
* Created at 2011-10-11
**/

//设置多个表格可编辑
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);
table.tBodies[0].appendChild(newRow);
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(/\.$/,'');  
}  

分享到:
评论
1 楼 yijiec 2015-12-11  
不错啊.....

相关推荐

    JS实现可编辑的表格单元格

    JS实现可编辑的表格单元格JS实现可编辑的表格单元格JS实现可编辑的表格单元格JS实现可编辑的表格单元格JS实现可编辑的表格单元格JS实现可编辑的表格单元格

    JS实现可编辑的表格

    不过,仅凭原生JavaScript实现的可编辑表格功能可能较为有限,例如无法实现复杂的排序、过滤或分页。这时,可以考虑引入一些成熟的JavaScript表格库,比如 handsontable、ag-Grid 或者 Tabulator。这些库提供了丰富...

    jQuery实现可编辑表格

    总结一下,jQuery实现可编辑表格主要涉及以下步骤: 1. 创建带有输入框的HTML表格结构。 2. 使用CSS定制样式,使输入框融入表格。 3. 使用jQuery监听事件,实现表格单元格的编辑和保存功能。 这个简单的示例展示了...

    可编辑表格js代码

    在IT行业中,尤其是在网页开发领域,可编辑表格的实现是一个常见的需求。"可编辑表格js代码" 提供了一种高效且灵活的解决方案,允许用户直接在网页上对表格数据进行编辑,极大地提升了交互性和用户体验。下面我们将...

    js实现可以编辑的表格

    3. 可编辑表格的设计与实现,包括监听用户交互、切换编辑状态和实时保存数据。 4. 代码注释和文档编写,以提高代码的可读性和可维护性。 通过学习和理解这个实现,开发者可以增强其在动态网页开发中的技能,尤其是...

    vue+iview 实现可编辑表格的示例代码

    先简单说明一下,这个Demo...IViewEditTable ## vue+iview 实现的可编辑表格 └── index.html ## 首页 └── js └── editTable.js ## 首页JS └── ivew ## iview相关 └── vue ├── axios.min.js ## a

    纯js和html可编辑的table(表格)

    综上所述,"纯js和html可编辑的table(表格)"项目结合了HTML的结构、JavaScript的交互性以及CSS的美化,实现了用户可以直接在网页上编辑表格的功能。这不仅可以提高用户体验,也简化了数据输入和管理的流程。通过...

    使用纯js实现 编辑的表格

    总结,使用纯JavaScript实现可编辑表格涉及以下几个关键知识点: 1. HTML表格结构和元素 2. JavaScript事件监听(click、blur等) 3. 动态DOM操作(创建、移除、修改元素) 4. 本地存储(localStorage)进行数据持久...

    JQuery实现可编辑的表格

    这些特性为我们提供了构建可编辑表格的基础。 1. **选择器**:在jQuery中,我们可以使用CSS选择器快速定位到表格元素,如`$('table tr td')`会选取表格中的所有单元格。通过选择器,我们可以针对特定行、列或单元格...

    js做的可编辑的表格

    这里我们探讨的主题是如何使用JavaScript(以及可能的库如jQuery或更专业化的数据网格库)来实现一个可编辑的表格功能。从提供的信息来看,你可能已经下载了一个名为"GridEdit.js"的文件和一个示例HTML页面"test....

    bootstrap插件_table可编辑表格_demo

    通过解压文件,你可以看到HTML文件展示了可编辑表格的界面,CSS文件负责样式,而JavaScript文件则包含了实现交互逻辑的代码。通过对这些文件的学习和研究,你可以理解并掌握在Bootstrap中创建可编辑表格的完整流程。

    用js制作的可编辑表格

    在本案例中,"用js制作的可编辑表格"是一个使用JavaScript实现的用户可以直接在网页上编辑表格内容的功能。这种功能在数据管理、信息展示和表单填写等场景下非常实用,因为它提供了直观且便捷的数据输入方式。 首先...

    js实现可编辑表格,可以直接运行

    以上就是创建一个可编辑表格的基本流程和扩展考虑点。在实际开发中,你可能需要根据项目需求进行调整和优化。这个压缩包提供的代码可以直接运行,是一个很好的起点,你可以在此基础上进一步完善和定制。

    JavaScript实现在线编辑表格

    本教程将探讨如何使用JavaScript实现在线编辑表格的功能,让用户能够直接在网页上对表格进行增删改查操作。 首先,我们需要一个HTML结构来展示表格。在HTML中,`&lt;table&gt;`元素用于创建表格,`&lt;tr&gt;`表示表格行,`&lt;td&gt;...

    js实现的可编辑表格控件

    可现实数据或者修改录入数据,每个单元格由小数,整数,文本,日期,基础资料,下拉列表等控件其中的一种构成。支持汇总,支持滚动条拖动,当横向滚动移动时,最左边的序列好列不动,当滚动条纵向移动时,表头和汇总...

    jquery实现可编辑表格

    然而,为了实现全功能的可编辑表格,我们需要监听`blur`和`input`事件,以捕获用户输入并保存更改。以下是一个简单的例子: ```javascript $(document).ready(function() { $('#myTable td').on('blur', function...

    基于jquery的可编辑表格实现代码

    本示例“基于jquery的可编辑表格实现代码”是关于如何利用jQuery创建一个功能丰富的交互式表格,允许用户双击单元格(TD元素)进行编辑,编辑完成后,数据会自动更新回原单元格。以下将详细介绍这一技术实现的关键...

    javascript可编辑的表格

    在JavaScript可编辑表格中,这些元素会作为操作的对象。 2. **DOM操作**:JavaScript通过Document Object Model (DOM) API与HTML元素进行交互。在可编辑表格中,我们可能需要使用`getElementById`、`querySelector`...

    原创-javascript服务器交互型可编辑表格

    【标题】"原创-javascript服务器交互型可编辑表格"是一个关于使用JavaScript实现与服务器进行交互的动态、可编辑表格的技术分享。在这个项目中,开发者利用JavaScript的灵活性和强大的功能,创建了一个用户可以直接...

    JQUERY实现可编辑的表格

    总之,使用jQuery实现可编辑表格是一项实用的技术,它允许用户直接在网页上修改数据,提高了交互性和数据管理的效率。通过学习和实践,你可以根据实际需求进行定制,创建出更加复杂的可编辑表格应用。

Global site tag (gtag.js) - Google Analytics