A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wzg682735 中级黑马   /  2016-6-17 15:39  /  1958 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序。

参考答案:
  1. <table id="table" border="1">
  2.         <tr>
  3.             <th id="name">姓名</th>
  4.             <th id="power">力量</th>
  5.             <th id="agility">敏捷</th>
  6.             <th id="iq">智力</th>
  7.         </tr>
  8. </table>

复制代码
  1.   var data = [{
  2.         name: '德鲁伊',
  3.         power: 17,
  4.         agility: 24,
  5.         iq: 13
  6.     }, {
  7.         name: '月之骑士',
  8.         power: 15,
  9.         agility: 22,
  10.         iq: 16
  11.     }, {
  12.         name: '众神之王',
  13.         power: 19,
  14.         agility: 15,
  15.         iq: 20
  16.     }, {
  17.         name: '流浪剑客',
  18.         power: 23,
  19.         agility: 15,
  20.         iq: 14
  21.     }];

  22.     ! function() { //初始化渲染
  23.         var table = $('table');
  24.         for (var i = 0; i < data.length; i++) {
  25.             item = '<tr><td class="name">' + data[i].name + '</td><td class="power">' + data[i].power + '</td><td class="agility">' + data[i].agility + '</td><td class="iq">' + data[i].iq + '</td></tr>';
  26.             table.append(item);
  27.         }
  28.     }()

  29.     ! function() {
  30.         var count_name = 0,count_power = 0,count_agility = 0,count_iq = 0;

  31.         $('#name').click(function() {
  32.             count_power = 0,count_agility = 0,count_iq = 0;    //将其他排序列状态置零,也就是说当点了姓名进行排序之后,若再点其它排序,那么必然是从升序开始
  33.             if (count_name % 2 === 1) { //奇数升序
  34.                 data = sort(data, 'name', 'unicode,ascend');
  35.             } else { //偶数降序
  36.                 data = sort(data, 'name', 'unicode,descend');
  37.             }
  38.             count_name++;

  39.             //视图层渲染
  40.             var area = $("tr").slice(1);
  41.             for (var i = 0; i < data.length; i++) {
  42.                 area.eq(i).find('.name').text(data[i].name);
  43.                 area.eq(i).find('.power').text(data[i].power);
  44.                 area.eq(i).find('.agility').text(data[i].agility);
  45.                 area.eq(i).find('.iq').text(data[i].iq);
  46.             }
  47.         })
  48.         $('#power').click(function() {
  49.             count_name = 0,count_agility = 0,count_iq = 0;
  50.             if (count_power % 2 === 1) {
  51.                 data = sort(data, 'power', 'number,ascend');
  52.             } else {
  53.                 data = sort(data, 'power', 'number,descend');
  54.             }
  55.             count_power++;

  56.             var area = $("tr").slice(1);
  57.             for (var i = 0; i < data.length; i++) {
  58.                 area.eq(i).find('.name').text(data[i].name);
  59.                 area.eq(i).find('.power').text(data[i].power);
  60.                 area.eq(i).find('.agility').text(data[i].agility);
  61.                 area.eq(i).find('.iq').text(data[i].iq);
  62.             }
  63.         })
  64.         $('#agility').click(function() {
  65.             count_name = 0,count_power = 0,count_iq = 0;
  66.             if (count_agility % 2 === 1) {
  67.                 data = sort(data, 'agility', 'number,ascend');
  68.             } else {
  69.                 data = sort(data, 'agility', 'number,descend');
  70.             }
  71.             count_agility++;

  72.             var area = $("tr").slice(1);
  73.             for (var i = 0; i < data.length; i++) {
  74.                 area.eq(i).find('.name').text(data[i].name);
  75.                 area.eq(i).find('.power').text(data[i].power);
  76.                 area.eq(i).find('.agility').text(data[i].agility);
  77.                 area.eq(i).find('.iq').text(data[i].iq);
  78.             }
  79.         })
  80.         $('#iq').click(function() {
  81.             count_name = 0,count_power = 0,count_agility = 0;
  82.             if (count_iq % 2 === 1) {
  83.                 data = sort(data, 'iq', 'number,ascend');
  84.             } else {
  85.                 data = sort(data, 'iq', 'number,descend');
  86.             }
  87.             count_iq++;

  88.             var area = $("tr").slice(1);
  89.             for (var i = 0; i < data.length; i++) {
  90.                 area.eq(i).find('.name').text(data[i].name);
  91.                 area.eq(i).find('.power').text(data[i].power);
  92.                 area.eq(i).find('.agility').text(data[i].agility);
  93.                 area.eq(i).find('.iq').text(data[i].iq);
  94.             }
  95.         })
  96.     }()

  97.     //对数据进行排序
  98.     function sort(data, field, compareFunction) {
  99.         var handler = {
  100.             'unicode,ascend': function(pre, next) {
  101.                 if (pre[field] > next[field])
  102.                     return -1;
  103.                 else
  104.                     return 1;
  105.             },
  106.             'unicode,descend': function(pre, next) {
  107.                 if (pre[field] > next[field])
  108.                     return 1;
  109.                 else
  110.                     return -1;
  111.             },
  112.             'number,ascend': function(pre, next) {
  113.                 return next[field] - pre[field];
  114.             },
  115.             'number,descend': function(pre, next) {
  116.                 return pre[field] - next[field];
  117.             }
  118.         }
  119.         if (typeof compareFunction === 'string') {
  120.             data.sort(handler[compareFunction]);
  121.         } else if (typeof compareFunction === 'function')
  122.             data.sort(compareFunction);
  123.         else
  124.             data.sort();
  125.         return data;
  126.     }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马