jQuery实现为table表格动态添加或删除tr功能示例


Posted in jQuery onFebruary 19, 2019

本文实例讲述了jQuery实现为table表格动态添加或删除tr功能。分享给大家供大家参考,具体如下:

HTML页面元素如下:

<!-- 订单明细dialog -->
<div id="contractDetailDiv" title="销售订单明细" style="display:none;">
  <table class="exhibit_table" id="contractDetailTab" border="1">
    <tr>
      <td>订单合同号</td>
      <td colspan="4" id="orderId"></td>
    </tr>
    <tr>
      <td>捆包号</td>
      <td>品名</td>
      <td>规格</td>
      <td>材质</td>
      <td>重量</td>
    </tr>
  </table>
</div>

业务需求是,从后台获取到订单合同下的明细信息,然后动态添加到上面的表格中,做法是:

1. 在jqgrid表格中为每一列添加一个“订单明细”的图标,如下所示:

jQuery(function($) {
  var grid_selector = "#grid-table";
  var pager_selector = "#grid-pager";
  jQuery(grid_selector).jqGrid({
    data: grid_data,
    datatype: "local",      //从服务器端返回的数据类型
    height: 400,        //表格高度,可以是数字,像素值或者百分比
    /****列显示名称******/
    colNames:['id', '订单合同号', '收货单位', '提货方式', '物资来源', '物资来源厂商名称', '订单总重量', '绑定合同号来源', '绑定合同号', '订单状态', '订单明细'],
    /****常用到的属性:name 列显示的名称;index 传到服务器端用来排序用的列名称;width 列宽度;align 对齐方式;sortable 是否可以排序******/
    colModel:[
      {name:'id',index:'id', width:0, sorttype:"int", editable: true, hidden:true},
      {name:'goodsOrder', index:'goodsOrder', width:60, editable:true, editoptions:{size:"20",maxlength:"30"}},
      {name:'goodsReceiveCompany', index:'goodsReceiveCompany', width:60, sortable:false, editable:true, editoptions:{size:"20",maxlength:"30"}},
      {name:'goodsDeliveryMode', index:'goodsDeliveryMode', width:60, sortable:false, editable:true, editoptions:{size:"20",maxlength:"30"}},
      {name:'goodsOrigin', index:'goodsOrigin', width:60, editable:true, editoptions:{size:"20",maxlength:"30"}},
      {name:'originName', index:'originName', width:60, sortable:false, editable:true, editoptions:{size:"20",maxlength:"30"}},
      {name:'contractWeight', index:'contractWeight', width:60, sortable:false, editable:true, editoptions:{size:"20",maxlength:"30"}, formatter: "number", formatoptions: {thousandsSeparator:",", defaulValue:"", decimalPlaces:3}},
      {name:'purchaseContractOrigin', index:'purchaseContractOrigin', width:60, sortable:false, editable: true, editoptions:{size:"20",maxlength:"30"}},
      {name:'purchaseContractOriginVal', index:'purchaseContractOriginVal', width:60, sortable:false, editable: true, editoptions:{size:"20",maxlength:"30"}},
      {name:'contractStatus', index:'contractStatus', width:60, editable:true, editoptions:{size:"20",maxlength:"30"}},
      {name:'myac222', index:'', width:120, fixed:true, sortable:false, resize:false, align:'center',
        formatter: function (value, grid, rows, state) {
          return "<a href=\"#\" title=\"订单明细\" style=\"margin-left:10px\" onclick=\"contractDetail(" + rows.id + ")\"><i class=\"icon-bar-chart blue\" style=\"font-size:15px\"></i></a>";
        }
      }
    ],
    loadonce: true, //一次加载全部数据到客户端,由客户端进行排序。
       sortable: true,
    rownumbers: true,    //添加左侧行号
    viewrecords: true,    //定义是否要显示总记录数
    rowNum: 10,        //在grid上显示记录条数,这个参数是要被传递到后台
    rowList: [10,20,30],    //一个下拉选择框,用来改变显示记录数,当选择时会覆盖rowNum参数传递到后台
    pager: pager_selector,  //定义翻页用的导航栏,必须是有效的html元素。翻页工具栏可以放置在html页面任意位置
    altRows: true,      //设置为交替行表格,默认为false
    //toppager: true,
    multiselect: true,      //定义是否可以多选
    //multikey: "ctrlKey",    //只有在multiselect设置为ture时起作用,定义使用那个key来做多选。shiftKey,altKey,ctrlKey
    multiboxonly: true,      //只有当multiselect = true.起作用,当multiboxonly 为ture时只有选择checkbox才会起作用
    gridComplete:function(){ //在此事件中循环为每一行添加修改和删除链接
    },
    loadComplete : function() {
      $(grid_selector).closest(".ui-jqgrid-bdiv").css({ 'overflow-y' : 'scroll' });
      var table = this;
      setTimeout(function(){
        updatePagerIcons(table);
        enableTooltips(table);
      }, 0);
    },
    editurl: "???",  //定义对form编辑时的url
    caption: "销售订单列表",    //表格名称
    autowidth: true        //如果为ture时,则当表格在首次被创建时会根据父元素比例重新调整表格宽度。如果父元素宽度改变,为了使表格宽度能够自动调整则需要实现函数:setGridWidth
  });

上面添加“订单明细”的图标时,为其绑定了onclick事件,此事件将传递每一行的id给绑定函数。

2. 在绑定函数中首先获取onclick传递过来的行id,通过此行id可访问该行的每个字段的数据。然后在此绑定函数中通过ajax从后台获取到“订单明细”的具体数据,再通过append方法将获取到的数据动态添加到table表格中。最后,将此table表格所在的div以dialog的形式弹出来展示给用户。如下:

/*********合同明细弹出框************/
function contractDetail(id){
  $("#contractDetailTab tr:gt(0)").empty();
  var rowData = $("#grid-table").jqGrid('getRowData',id);
  var purchaseContractOrder = rowData.purchaseContractOriginVal;
  $("#orderId").html(rowData.goodsOrder);
  //请求合同明细数据
  $.ajax({
    async:false,
    cache:true,
    type: "GET",
    url: "goods_findPagePurchaseOrderDetail.do?purchaseContractOrder="+purchaseContractOrder, //获取json数据
    success: function(result){
      var result = eval('('+ result +')');
      if(result.root != undefined && result.root.length > 0){
        var resultContent = result.root;
        for (var i = 0; i < resultContent.length; i++) {
          $("#contractDetailTab").append("<tr><td>捆包号</td><td>品名</td><td>规格</td><td>材质</td><td>重量</td></tr><tr><td>"+resultContent[0][0]+"</td><td>"+resultContent[0][1]+"</td><td>"+resultContent[0][2]+"</td><td>"+resultContent[0][3]+"</td><td>"+resultContent[0][5]+"</td></tr>");
        }
        $("#contractDetailDiv").dialog({
          autoOpen:true,
          height:300,
          width:450,
          resizable:false,
          modal:true,
        });
      } else {
        alert("该订单合同下无明细信息!");
      }
    },
    error: function() {
      alert("获取合同明细失败")
    }
  });
}

这里需要注意的是,每次动态添加新的明细之前,需要将上一次的明细信息清空,即使用empty方法将上一次动态添加的tr先删除掉,然后再动态添加新的明细信息。

动态删除除第一行以外的其他tr:

$("#contractDetailTab tr:gt(0)").empty();
$("#contractDetailTab tr").not(':eq(0)').empty();

动态添加tr:

$("#contractDetailTab").append("<tr><td>捆包号</td><td>品名</td><td>规格</td><td>材质</td><td>重量</td></tr><tr><td>"+resultContent[0][0]+"</td><td>"+resultContent[0][1]+"</td><td>"+resultContent[0][2]+"</td><td>"+resultContent[0][3]+"</td><td>"+resultContent[0][5]+"</td></tr>");

动态删除除第一行和最后一行以外的其他tr:

$("#contractDetailTab tr:not(:first):not(:last)").remove();

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

jQuery 相关文章推荐
jQuery序列化后的表单值转换成Json
Jun 16 jQuery
用户管理的设计_jquery的ajax实现二级联动效果
Jul 13 jQuery
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
jquery easyui如何实现格式化列
Jul 30 jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 jQuery
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
jQuery 改变P标签文本值方法
Feb 24 jQuery
20个最常见的jQuery面试问题及答案
May 23 jQuery
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
jquery登录的异步验证操作示例
May 09 jQuery
jQuery事件多次绑定与解绑问题实例分析
Feb 19 #jQuery
JS/jQuery实现简单的开关灯效果【案例】
Feb 19 #jQuery
jQuery AJAX与jQuery事件的分析讲解
Feb 18 #jQuery
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 #jQuery
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 #jQuery
jQuery实现的五星点评功能【案例】
Feb 18 #jQuery
jQuery实现的隔行变色功能【案例】
Feb 18 #jQuery
You might like
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
javascript multibox 全选
2009/03/22 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
2016/10/11 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
SQL Server笔试题
2012/01/10 面试题
喜之郎果冻广告词
2014/03/20 职场文书
团日活动总结怎么写
2014/06/25 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python