首页 > 学院 > 开发设计 > 正文

JS实现可编辑的表格

2019-11-06 08:27:01
字体:
来源:转载
供稿:网友

[javascript] view plain copy  [Javascript] view plain copyfrom:<a href="http://apps.hi.baidu.com/share/detail/30648462">http://apps.hi.baidu.com/share/detail/30648462</a>  [javascript] view plain copyGridEdit.js  [javascript] view plain copy/**  * JS实现可编辑的表格    * 用法:EditTables(tb1,tb2,tb2,......);  * Create by Senty at 2008-04-12 **/    //设置多个表格可编辑  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(//.$/, '');  }    [html] view plain copy<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test3.aspx.cs" Inherits="Bee.test3" %>    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html>  <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 type="text/javascript" src="Scripts/GridEdit.js"></script>  <script type="text/javascript">      var tabProduct = document.getElementById("tabProduct");        // 设置表格可编辑      // 可一次设置多个,例如:EditTables(tb1,tb2,tb2,......)      EditTables(tabProduct);      </script>  </body>  </html>  

转载出处:http://blog.csdn.net/easybjy/article/details/7696498


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表