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 封装 Ajax 常用方法(推荐)
May 21 jQuery
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 jQuery
jQuery复合事件用法示例
Jun 10 jQuery
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
JQuery 又谈ajax局部刷新
Nov 27 jQuery
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
JQuery常用简单动画操作方法回顾与总结
Dec 07 jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
jquery实现的放大镜效果示例
Feb 24 jQuery
jquery轮播图插件使用方法详解
Jul 31 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
领悟php接口中interface存在的意义
2013/06/27 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
js读取本地文件的实例
2017/12/22 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
js实现电灯开关效果
2021/01/19 Javascript
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python随机生成彩票号码的方法
2015/03/05 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
爱游人:Travelliker
2017/09/05 全球购物
劳动实践课感言
2014/02/01 职场文书
团队精神口号
2014/06/06 职场文书
工商管理自荐书
2014/07/06 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
对Keras自带Loss Function的深入研究
2021/05/25 Python
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技