javascript实现表格增删改操作实例详解


Posted in Javascript onMay 15, 2015

本文实例讲述了javascript实现表格增删改操作的方法。分享给大家供大家参考。具体实现方法如下:

<!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=utf-8" />
<title>javascript 表格增删改</title>
<script type="text/javascript">
var _OTable_ = null;
var _oTbody_ = null;
var _arrSelect_ = new Array;
var _oTempValue_=new Object;
_oTempValue_["$updateIndex"]=-1;
var _TheadName_=new Array("姓名","性别","年龄","籍贯","删除否");
var CELLS_COUNT=_TheadName_.length-1;
String.prototype.trim=function()
{
  return this.replace(/(^\s*)(\s*$)/g, '');
}
window.onload = function()
{
 var $oAdd = document.getElementById("btnAdd");
 $oAdd.onclick = function()
 {
  var _oCol1_ = document.getElementById("Col1");
  var _oCol2_ = document.getElementById("Col2");
  var _oCol3_ = document.getElementById("Col3");
  var _oCol4_ = document.getElementById("Col4");
  if (!_OTable_) //如果不存在表则新建
  {
   _OTable_ = document.createElement("table");
   _OTable_.setAttribute("border", "1");
   _OTable_.setAttribute("width", "800px");
   var _Thead_=_OTable_.createTHead();
   var _TRow_=_Thead_.insertRow(0);
   for(var _headindex_=0;_headindex_<CELLS_COUNT+1;_headindex_++ )
   {
     var _tTh=_TRow_.insertCell(_headindex_);
     _tTh.appendChild(document.createTextNode(_TheadName_[_headindex_]));
   }
   _oTbody_ = document.createElement("tbody");
   _OTable_.appendChild(_oTbody_);
   document.getElementById("TableData").appendChild(_OTable_);
  }
  if(!_oCol1_.value.trim()){alert("姓名必须填写!"); return;}
  //添加一行
  var _oRow_ = _oTbody_.insertRow(-1);
  //添加5列,四列值,一列选择
  var _oCell1_ = _oRow_.insertCell(-1);
  _oCell1_.appendChild(document.createTextNode(_oCol1_.value));
  var _oCell2_ = _oRow_.insertCell(-1);
  _oCell2_.appendChild(document.createTextNode(_oCol2_.value));
  var _oCell3_ = _oRow_.insertCell(-1);
  _oCell3_.appendChild(document.createTextNode(_oCol3_.value));
  var _oCell4_ = _oRow_.insertCell(-1);
  _oCell4_.appendChild(document.createTextNode(_oCol4_.value));
  _oCol1_.value = "";
  _oCol2_.value = "";
  _oCol3_.value = "";
  _oCol4_.value = "";
  //选择
  var _oCell5_ = _oRow_.insertCell(4);
  _oCell5_.setAttribute("style", "width:50px;");
  var _oCheckBox_ = document.createElement("input");
  _oCheckBox_.setAttribute("type", "checkbox");
  _oCell5_.appendChild(_oCheckBox_);
  _oCheckBox_.onclick = function()
  {
   if (_oCheckBox_.checked)
   {
    var _rowIndex_ = _oCheckBox_.parentNode.parentNode.rowIndex-1;
    _arrSelect_.push(_rowIndex_);
   }
  }
  _oRow_.ondblclick = function()
  {
   var _oPreUpdateIndex_=_oTempValue_["$updateIndex"];
   var _oPreTempRow_=null;
   if (parseInt(_oPreUpdateIndex_) != -1) //原先选定行重置
   {
    if (!_OTable_ || !_oTbody_) return;
    _oPreTempRow_= _oTbody_.rows[parseInt(_oPreUpdateIndex_)];
    var _cancelornot_=false;
    for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
    {
     var $attributeNode_=_oPreTempRow_.cells[_cellindex_].firstChild;
     var $nodedata_=document.all?$attributeNode_.getAttribute("value"):$attributeNode_.value;
     if($nodedata_!=_oTempValue_["$"+_cellindex_])//与原值比较
     {
     _cancelornot_=confirm("你之前的内容作了修改,保存修改吗?");
     break;
     }
    }
    if(_cancelornot_)
    {
     //避免前次提交为空
     var _firstNode_=_oPreTempRow_.cells[0].firstChild;
     var $firstnodedata_=_firstNode_.getAttribute("value");
     if(!$firstnodedata_||!$firstnodedata_.trim()){alert("姓名不能为空,请重新编辑!"); _firstNode_.focus(); return;};
     for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
     {
      var _oldNode_=_oPreTempRow_.cells[_cellindex_].firstChild;
      var $nodedata_=document.all?_oldNode_.getAttribute("value"):_oldNode_.value;
      var _textnode_= document.createTextNode($nodedata_);
      _oPreTempRow_.cells[_cellindex_].replaceChild(_textnode_,_oldNode_);
      delete _oTempValue_["$"+_cellindex_];
     }
    }
    else
    {
     for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
     {
      var _oldNode_=_oPreTempRow_.cells[_cellindex_].firstChild;
      var _textnode_= document.createTextNode(_oTempValue_["$"+_cellindex_]);
      _oPreTempRow_.cells[_cellindex_].replaceChild(_textnode_,_oldNode_); 
      delete _oTempValue_["$"+_cellindex_];
     }
    }
   }
   _oTempValue_["$updateIndex"] = this.rowIndex-1;
   //单元格中只有一个文本节点
   for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
   {
    var _textbox_= document.createElement("input");
    _textbox_.setAttribute("type", "text");
    var _preNode_=this.cells[_cellindex_].firstChild;
    _oTempValue_["$"+_cellindex_]=_preNode_.nodeValue; //记录原先的值
    _textbox_.setAttribute("value",_preNode_.nodeValue);
    this.cells[_cellindex_].replaceChild(_textbox_ ,_preNode_);
   }
  };
 };
 //删除
 var $oDelete = document.getElementById("btnDelete");
 $oDelete.onclick = function()
 {
  if (_arrSelect_.length == 0) { alert("您还没有选择要删除的行."); return; }

  if (_OTable_ && _oTbody_)
  {
   var _confirmMsg_ = "你确定要删除名字是如下:\n";
   for (var index = 0, iLen = _arrSelect_.length; index < iLen; index++)
   {
    var _deletName_ = _oTbody_.rows[parseInt(_arrSelect_[index])].cells[0].firstChild.nodeValue;
    _confirmMsg_ = _confirmMsg_.concat(_deletName_ + "\n");
   }
   _confirmMsg_ = _confirmMsg_.concat("的信息吗?");
   if (!confirm(_confirmMsg_)) return;

   for (var index = _arrSelect_.length - 1; index >= 0; index--)
   {
    _oTbody_.deleteRow(parseInt(_arrSelect_[index]));
   }
  }
  _arrSelect_.splice(0,_arrSelect_.length); //清空选择列表
 };
//更新:(红色部分为更新的代码)
//更新
 var $oUpdate = document.getElementById("btnUpdate");
 $oUpdate.onclick = function()
 {
  var _oPreUpdateIndex_=_oTempValue_["$updateIndex"]
  if (parseInt(_oPreUpdateIndex_)== -1){alert("您未编辑任何更新行!") ;return;}
  if (_OTable_ && _oTbody_ )
  {
    if(confirm("您确定修改吗?"))
    {
     var _temprow_= _oTbody_.rows[parseInt(_oPreUpdateIndex_)];
     var $namenode=_temprow_.cells[0].firstChild;
     var $namenodevalue=document.all?$namenode.getAttribute("value"):$namenode.value;
     if(!$namenodevalue||!$namenodevalue.trim()){ alert("姓名不能为空,请重新编辑!"); $namenode.focus(); return;}
     for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
     {
     var $tmpnode_=_temprow_.cells[_cellindex_].firstChild;
     var $nodedata_=document.all?$tmpnode_.getAttribute("value"):$tmpnode_.value;
     var _textnode_= document.createTextNode($nodedata_);
     var _oldNode_=_temprow_.cells[_cellindex_].firstChild;
     _temprow_.cells[_cellindex_].replaceChild(_textnode_,_oldNode_);
     delete _oTempValue_["$"+_cellindex_];
     }
    } 
  }
  _oTempValue_["$updateIndex"] = -1
 };
   //查找
 var $oFind = document.getElementById("btnFind");
  $oFind.onclick=function()
  {
   if(!_OTable_ && !_oTbody_ ){alert("目前尚无数据可查!");return;}
   ///////////////判断之前有编辑未提交的
   var _oPreUpdateIndex_=_oTempValue_["$updateIndex"];
   var _oPreTempRow_=null;
  if (parseInt(_oPreUpdateIndex_) != -1) //原先选定行重置
  {
   if (!_OTable_ || !_oTbody_) return;
   _oPreTempRow_= _oTbody_.rows[parseInt(_oPreUpdateIndex_)];
   var _cancelornot_=false;
   for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
   {
    var $childNode_=_oPreTempRow_.cells[_cellindex_].firstChild;
    var $nodedata_=document.all?$childNode_.getAttribute("value"):$childNode_.value;
    if($nodedata_!=_oTempValue_["$"+_cellindex_])//与原值比较
    {
    _cancelornot_=confirm("你之前的内容作了修改,保存修改吗?");
    break;
    }
   }
   if(_cancelornot_)
   {
    //避免前次提交为空
    var _firstNode_=_oPreTempRow_.cells[0].firstChild;
    var $firstnodedata_=document.all?_firstNode_.getAttribute("value"):_firstNode_.value;
    if(!$firstnodedata_||!$firstnodedata_.trim()){alert("姓名不能为空,请重新编辑!"); _firstNode_.focus(); return;};
    for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
    {
     var _oldNode_=_oPreTempRow_.cells[_cellindex_].firstChild;
     var $nodedata_=document.all?_oldNode_.getAttribute("value"):_oldNode_.value;
     var _textnode_= document.createTextNode($nodedata_);
     _oPreTempRow_.cells[_cellindex_].replaceChild(_textnode_,_oldNode_);
     delete _oTempValue_["$"+_cellindex_];
    }
   }
   else
   {
    for(var _cellindex_=0;_cellindex_<CELLS_COUNT;_cellindex_++)
    {
     var _oldNode_=_oPreTempRow_.cells[_cellindex_].firstChild;
     var _textnode_= document.createTextNode(_oTempValue_["$"+_cellindex_]);
     _oPreTempRow_.cells[_cellindex_].replaceChild(_textnode_,_oldNode_); 
     delete _oTempValue_["$"+_cellindex_];
    }
   }
  }
  //清除更新列表
  for(var $obj_ in _oTempValue_)
  {
    delete _oTempValue_[$obj_];
  }
   // _oTempValue_=new Object; 
  _oTempValue_["$updateIndex"] = -1;
   ////////////////////////开始查询
   var _$oSelect_= document.getElementById("selectCol");
   var _Index_=_$oSelect_.selectedIndex;
   var _$oSelectValue_= _$oSelect_.value;
   var _$oSelectText_= _$oSelect_.options[_Index_].text;
   var _$olike_=document.getElementById("Col9");
   var _$rowcollection_=_oTbody_.rows;
   var _$rLen=_$rowcollection_.length;
   switch(parseInt(_$oSelectValue_))
   {
   case 0:
    for(var _rIndex=0;_rIndex<_$rLen;_rIndex++)
    {
     var _selectrow_=_$rowcollection_[_rIndex];
     var $pat = new RegExp(_$olike_.value.trim(),"i");
     if(!_$olike_.value.trim()){_selectrow_.style.display=document.all?"block":"table-row";}//如果查询框为空,则全部提取..模糊搜索
     else {if(!$pat.test(_selectrow_.cells[0].firstChild.nodeValue.trim())){
     _selectrow_.style.display="none";}}
    }
   break;
   case 1:
    for(var _rIndex=0;_rIndex<_$rLen;_rIndex++)
    {
     var _selectrow_=_$rowcollection_[_rIndex];
     var $pat = new RegExp(_$olike_.value.trim(),"i");
     if(!_$olike_.value.trim()){_selectrow_.style.display=document.all?"block":"table-row";}
     else 
     {if(!$pat.test(_selectrow_.cells[1].firstChild.nodeValue.trim()))
     {_selectrow_.style.display="none";}}
    }
   break;
   case 2:
    for(var _rIndex=0;_rIndex<_$rLen;_rIndex++)
    {
     var _selectrow_=_$rowcollection_[_rIndex];
     var $pat = new RegExp(_$olike_.value.trim(),"i");
     if(!_$olike_.value.trim()){_selectrow_.style.display=document.all?"block":"table-row";}
     else 
     {if(!$pat.test(_selectrow_.cells[2].firstChild.nodeValue.trim()))
     { _selectrow_.style.display="none";}}
    }
   break;
   //更新(红色部分为更新的)
   case 3:
    for(var _rIndex=0;_rIndex<_$rLen;_rIndex++)
    {
     var _selectrow_=_$rowcollection_[_rIndex];
     var $pat = new RegExp(_$olike_.value.trim(),"i");
     if(!_$olike_.value.trim()){_selectrow_.style.display=document.all?"block":"table-row";}
    else
     {if(!$pat.test(_selectrow_.cells[3].firstChild.nodeValue.trim()))
     { _selectrow_.style.display="none";}}
    }
   break; 
   }
  _arrSelect_.splice(0,_arrSelect_.length);//清除删除列表
  var _checkBoxList_=document.getElementsByTagName("input"); //重置checkbox选择.
  for(var _index=0,iLen=_checkBoxList_.length;_index<iLen;_index++)
  {
   if(_checkBoxList_[_index].type=="checkbox")
   {
    _checkBoxList_[_index].checked=false;
   }
  }
  };
  var $oSelectAll = document.getElementById("btnSelectAll");
  $oSelectAll.onclick=function()
  {
   if(_OTable_ && _oTbody_ )
   {
    var _$rowall_=_oTbody_.rows;
    for(var _rIndex=0,_rLen=_$rowall_.length;_rIndex<_rLen;_rIndex++)
    {
     var _selectrow_=_$rowall_[_rIndex];
     _selectrow_.style.display=document.all?"block":"table-row";
    }
   }
  }
}
</script>
</head>
<body>
<fieldset>
  <legend>操作Table之增删查改</legend>
  <fieldset>
    <legend>添加</legend>
    <label for="Col1">
      姓名:
    </label>
    <input type="text" id="Col1" />
    <label for="Col2">
      性别:
    </label>
    <input type="text" id="Col2" />
    <label for="Col3">
      年龄:
    </label>
    <input type="text" id="Col3" />
    <label for="Col4">
      籍贯:
    </label>
    <input type="text" id="Col4" />
    <input type="button" value="添加" id="btnAdd" />
  </fieldset>
  <fieldset>
    <legend>查找</legend>
    <label for="Col9">
      查找内容:
    </label>
    <script type="text/javascript">
      var options = ["<option value=\"0\" selected>姓名</option>", "<option value=\"1\">性别</option>", "<option value=\"2\">年龄</option>", "<option value=\"3\">籍贯</option>"];
      document.write("<select name=\"selectCol\" id=\"selectCol\">" + options.join("") + "</select>");
    </script>
    <input type="text" id="Col9" />
    <input type="button" value="查找" id="btnFind" />
  </fieldset>
</fieldset>
<br />
<fieldset id="TableData">
  <legend>表格数据</legend>
</fieldset>
<input type="button" value="删除" id="btnDelete" />
<input type="button" value="更新" id="btnUpdate" />
<input type="button" value="显示全部" id="btnSelectAll" />
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
解决FLASH需要点击激活的代码
Dec 20 Javascript
javascript 特性检测并非浏览器检测
Jan 15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
Jan 23 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
JS设置cookie、读取cookie、删除cookie
Apr 17 Javascript
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
详解webpack运行Babel教程
Jun 13 Javascript
详解微信小程序input标签正则初体验
Aug 18 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
Apr 17 Javascript
Vue动态组件和异步组件原理详解
May 06 Javascript
Java Varargs 可变参数用法详解
Jan 28 Javascript
uniapp实现横向滚动选择日期
Oct 21 Javascript
javascript实现可全选、反选及删除表格的方法
May 15 #Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
May 15 #Javascript
javascript实现Table排序的方法
May 15 #Javascript
Javascript动态创建表格及删除行列的方法
May 15 #Javascript
javascript制作的滑动图片菜单
May 15 #Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 #Javascript
javascript实现日期按月份加减
May 15 #Javascript
You might like
深入密码加salt原理的分析
2013/06/06 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php构造函数与析构函数
2016/04/23 PHP
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
Python是编译运行的验证方法
2015/01/30 Python
Python中enumerate函数代码解析
2017/10/31 Python
python字符串常用方法
2018/06/14 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
Internet主要有哪些网络群组成
2015/12/24 面试题
工程概预算专业毕业生求职信
2013/10/04 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
研究生求职自荐书
2014/06/23 职场文书
森林防火宣传标语
2014/06/27 职场文书
社区低保工作总结2015
2015/07/23 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
二年级作文之动物作文
2019/11/13 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle