jQuery增加和删除表格项目及实现表格项目排序的方法


Posted in Javascript onMay 30, 2016

增加和删除行
jquery对表格的操作是老生常谈的问题。最近项目中用到了,今天在这里分享一下!
效果大体如下:

jQuery增加和删除表格项目及实现表格项目排序的方法

分享一下代码吧!
html

<div class="table-responsive" id="Bk_table" style="display:none;">
          <table class="table table-hover table-bordered">
            <thead>
              <tr>
                <th>
            <div class="out"> 
              <b>板块</b> 
              <em>维度</em> 
            </div>
            </th>
            </tr>
            </thead>
            <tbody>
            </tbody>
          </table>
 </div>

js操作如下:

deleteLie: function () { //删除一列
      var index = $(this).parent().index();
      for (var i = 0; i < $(".table tr").length; i++) {
        $($(".table tr")[i]).children().eq(index).remove();
      }
      if ($(".table tr").length == 1 && $(".table tr").eq(0).children().length == 1) {
        $("#Bk_table").hide();
        $(".blankShow").show();
      }
    },
    deleteOneline: function () { //删除一行
      $(this).parent().parent().remove();
      if ($(".table tr").length == 1 && $(".table tr").eq(0).children().length == 1) {
        $("#Bk_table").hide();
        $(".blankShow").show();
      }
    },
    addOneBk: function () { //增加一列
      if ($("#Bk_table").is(":hidden")) {
        $("#Bk_table").show();
      }
      if ($(".blankShow").is(":visible")) {
        $(".blankShow").hide();
      }
      var firstLie = ' <th class="hovershow"><span class="font_zs" style="display:none">中弘西岸3</span>' +
          '<input type="text" class="form-control getPrevalue" placeholder="填写板块名称" />' +
          '<a class="glyphicon glyphicon-remove bkdelete delete_lie"></a></th>';
      $(".table>thead>tr").eq(0).append(firstLie);
      var otherLie = '<td><input type="text" class="form-control" value="" placeholder="1-5之间数字" ' +
          'onkeyup="if(isNaN(value)||parseFloat(value)>5||parseFloat(value)<1)execCommand(\'undo\')"' +
          'onafterpaste="if(isNaN(value)||parseFloat(value)>5||parseFloat(value)<1)execCommand(\'undo\')" /></td>';
      $(".table>tbody>tr").append(otherLie);
    },
    addWd: function () { //增加一行
      if ($("#Bk_table").is(":hidden")) {
        $("#Bk_table").show();
      }
      if ($(".blankShow").is(":visible")) {
        $(".blankShow").hide();
      }
      var Wdhtml_1 = '<tr>' +
          ' <th scope="row" class="hovershow">' +
          '<span class="font_zs t1" style="display:none">维度三</span>' +
          '<input type="text" class="form-control getPrevalue" placeholder="填写维度名称" />' +
          '<a class="glyphicon glyphicon-remove bkdelete deleteoneline"></a>' +
          '</th>';
      var Wdhtml_2 = "";
      var LieLength = $(".table>thead>tr").children().length - 1;
      if (LieLength > 0) {
        for (var i = 0; i < LieLength; i++) {
          Wdhtml_2 = Wdhtml_2 + ' <td><input type="text" class="form-control" value="" placeholder="1-5之间数字" onkeyup="if(isNaN(value)||parseFloat(value)>5||parseFloat(value)<1)execCommand(\'undo\')" onafterpaste="if(isNaN(value)||parseFloat(value)>5||parseFloat(value)<1)execCommand(\'undo\')" /></td>';
        }
      }
      var Wdhtml_3 = '</tr>';
      var allWd = Wdhtml_1 + Wdhtml_2 + Wdhtml_3;
      $(".table>tbody").append(allWd);
}

表格排序
这个就稍微复杂点了...
主要思路:
因为JS有SORT的方法,对数组进行排序,那么通过个方法,我们就会想到数组了。
1.点标表格标头的时候,取出点击的是那一列。即列的索引值。因为下面要进行排序的就是该列。所以我要知道是点的那一列。
2.对表格的数据部分,也就是tbody部分,进行点击的列的取值,把这些值存入到一个数组当中。
3.将存入数据的数组,通过SORT方法进行排序。(这里写了两种,升,或降,因为是点击时要切换排序的方式。第一次降,第二次升,第三降,第四升,依次进行)
4.将排序好的数组的值进行遍历,在遍历过程中,和每一行TR的点击列的那个TD当中的数据进行一个比较。如果相等,就插入到tbody的最后去.(最先插入的,将是在第一行。)

$(function(){
  //存入点击列的每一个TD的内容;
  var aTdCont = [];

  //点击列的索引值
  var thi = 0
  
  //重新对TR进行排序
  var setTrIndex = function(tdIndex){
    for(i=0;i<aTdCont.length;i++){
      var trCont = aTdCont[i];
      $("tbody tr").each(function() {
        var thisText = $(this).children("td:eq("+tdIndex+")").text();
        if(thisText == trCont){
          $("tbody").append($(this));
        }
       });    
    }
  }
  
  //比较函数的参数函数
  var compare_down = function(a,b){
      return a-b;
  }
  
  var compare_up = function(a,b){
      return b-a;
  }
  
  //比较函数
  var fSort = function(compare){
    aTdCont.sort(compare);
  }
  
  //取出TD的值,并存入数组,取出前二个TD值;
  var fSetTdCont = function(thIndex){
      $("tbody tr").each(function() {
        var tdCont = $(this).children("td:eq("+thIndex+")").text();
        aTdCont.push(tdCont);
      });
  }
  //点击时需要执行的函数
  var clickFun = function(thindex){
    aTdCont = [];
    //获取点击当前列的索引值
    var nThCount = thindex;
    //调用sortTh函数 取出要比较的数据
    fSetTdCont(nThCount);
  }
  
  //点击事件绑定函数
  $("th").toggle(function(){
    thi= $(this).index();
    clickFun(thi);
    //调用比较函数,降序
    fSort(compare_up);
    //重新排序行
    setTrIndex(thi);
  },function(){
    clickFun(thi);
    //调用比较函数 升序
    fSort(compare_down);
    //重新排序行
    setTrIndex(thi);
  })  
})

示例:

<style type="text/css">
*{ margin:0px; padding:0px;}
table{
  border-collapse:collapse;}
table td{
  border:1px solid #036;
  text-align:center;
  }
thead tr th{
  cursor:pointer;
  background:#066;
  color:#FFFFFF;
  }
thead tr th:hover{
  background:#369;}
</style>
<table class="tabSort" width="546" height="300" border="0" align="center" cellpadding="0" cellspacing="0">
<thead>
  <tr>
   <th scope="col">名称</th>
   <th scope="col">价格</th>
   <th scope="col">地址</th>
   <th scope="col">备注</th>
   <th scope="col">时间</th>
  </tr>
 </thead>
<tbody>
  <tr>
   <td>商品1</td>
   <td>10.5</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品2</td>
   <td>11.3</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品3</td>
   <td>9.8</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品4</td>
   <td>12.6</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品5</td>
   <td>13.9</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品6</td>
   <td>18</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品7</td>
   <td>21.3</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品8</td>
   <td>6.5</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
  <tr>
   <td>商品9</td>
   <td>7.4</td>
   <td> </td>
   <td> </td>
   <td> </td>
  </tr>
 </tbody>
</table>

效果:

jQuery增加和删除表格项目及实现表格项目排序的方法

Javascript 相关文章推荐
JavaScript 动态创建VML的方法
Oct 14 Javascript
js setTimeout opener的用法示例详解
Oct 23 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
Oct 04 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
从零开始做一个pagination分页组件
Mar 15 Javascript
使用Bootstrap打造特色进度条效果
May 02 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
vue 实现滚动到底部翻页效果(pc端)
Jul 31 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 #Javascript
JS检测移动端横竖屏的代码
May 30 #Javascript
BootStrap中Tab页签切换实例代码
May 30 #Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 #Javascript
拥Bootstrap入怀——导航栏篇
May 30 #Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 #Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 #Javascript
You might like
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
python实现FTP服务器服务的方法
2017/04/11 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
python SocketServer源码深入解读
2019/09/17 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
优秀员工自荐书
2013/12/19 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
罚款通知怎么写
2015/04/22 职场文书
统招统分证明
2015/06/23 职场文书
儿子满月酒致辞
2015/07/29 职场文书