zoukankan      html  css  js  c++  java
  • ajax数据读取和绑定

      如何进行ajax数据读取和绑定呢?

    • 首先创建一个AJAX对象
    • 实现数据绑定
    • 实现隔行变色
    • 编写表格排序的方法(实现按照年龄这一列进行排序)
    • 通过文档碎片,把排序后的最新顺序,重新添加到tBody中(通过文档碎片,有效的避免了回流耗性能的问题,浏览器不用每当HTML结果发生改变,就重新对当前的页面进行渲染)
      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>Document</title>
      6     <style>
      7         .bg {
      8             background: yellowgreen;
      9         }
     10     </style>
     11 </head>
     12 <body>
     13 <table style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=40 cellPadding=1 width=250 align=center border=1
     14        id="tab">
     15     <thead>
     16     <tr>
     17         <td>姓名</td>
     18         <td>年龄</td>
     19         <td>性别</td>
     20     </tr>
     21     </thead>
     22     <tbody>
     23 
     24     </tbody>
     25 </table>
     26 
     27 <script type="text/javascript">
     28     var oTab = document.getElementById('tab');
     29     var tHead = oTab.tHead;
     30     var oThs = tHead.rows[0].cells;
     31     console.log(oThs);
     32     var tBody = oTab.tBodies[0];
     33     var oRows = tBody.rows;
     34 
     35     //将json字符串转为json对象
     36     function jsonParse(str) {
     37         return JSON in window ? JSON.parse(str) : eval('(' + str + ')');
     38     }
     39     //实现数据绑定
     40     function bind() {
     41         var frg = document.createDocumentFragment();
     42         for (var i = 0; i < data.length; i++) {
     43             var cur = data[i];
     44             var oTr = document.createElement('tr');
     45             for (var key in cur) {
     46 
     47                 var oTd = document.createElement('td');
     48                 if (key === 'sex') {
     49                     oTd.innerHTML = cur[key] === 0 ? '' : '';
     50                 } else {
     51                     oTd.innerHTML = cur[key];
     52                 }
     53                 oTr.appendChild(oTd);
     54             }
     55             frg.appendChild(oTr);
     56         }
     57         console.log(frg);
     58         tBody.appendChild(frg);
     59         frg = null;
     60     }
     61     //创建一个ajax对象
     62     var data = null;
     63     var xhr = new XMLHttpRequest;
     64     xhr.open('get', 'data.txt', true);
     65     xhr.send();
     66     xhr.onreadystatechange = function () {
     67 
     68         if (xhr.readyState === 4 && /^2d{2}$/.test(xhr.status)) {
     69             var val = xhr.responseText;
     70             data = jsonParse(val);
     71             bind();
     72             changeBg();
     73 //            sort()
     74 
     75 
     76         }
     77     }
     78     //实现隔行变色
     79     function changeBg() {
     80         for (var i = 0; i < oRows.length; i++) {
     81             oRows[i].className = i % 2 === 1 ? 'bg' : null;
     82         }
     83     }
     84     //编写表格排序方法:实现按照年龄这一列进行排序
     85     function sort() {
     86         //把存储所有的行的类数组转换为数组
     87         console.log(oRows);
     88         var ary = listToArray(oRows);
     89         var _this = this;
     90 
     91         //给数组进行排序,按照每一行的第二列中的内容有小到大排序
     92         console.log(ary);
     93         _this.flag *= -1;
     94         ary.sort(function (a, b) {
     95             //this->window;
     96             return parseFloat(a.cells[1].innerHTML) - parseFloat(b.cells[1].innerHTML) * _this.flag;
     97         })
     98         console.log(ary);
     99 
    100         //按照ary中的最新顺序,把每一行重新的添加到tbody中
    101 
    102         var frg = document.createDocumentFragment();
    103         for (var i = 0; i < ary.length; i++) {
    104             frg.appendChild(ary[i]);
    105         }
    106         tBody.appendChild(frg);
    107         frg = null;
    108     }
    109     //当点击第二列,实现一次升序,再点击降序
    110     oThs[1].flag = -1;        //给当前这一列增加一个自定义属性flag
    111     oThs[1].onclick = function () {
    112     //    sort();
    113         sort.call(this);    //this->oThs[1]
    114     }
    115     //类数组转成数组
    116     function listToArray(likeAry) {
    117         var ary = [];
    118         try {
    119             ary = Array.prototype.slice.call(likeAry);
    120         } catch (e) {
    121             for (var i = 0; i < likeAry.length; i++) {
    122                 ary[ary.length] = likeAry[i];
    123             }
    124         }
    125         return ary;
    126     }
    127 
    128 </script>
    129 </body>
    130 </html>

    data.txt:

     1 [
     2 {
     3 'name':'*莉',
     4 'age':24,
     5 'sex':1
     6 },{
     7 'name':'*建东',
     8 'age':25,
     9 'sex':0  
    10 },{
    11 'name':'小莉',
    12 'age':17,
    13 'sex':1
    14 },{
    15 'name':'东子',
    16 'age':16,
    17 'sex':0
    18 }
    19 ]

    效果图:

     

  • 相关阅读:
    [bzoj3295][Cqoi2011][动态逆序对] (树套树)
    [bzoj3209][花神的数论题] (数位dp+费马小定理)
    [bzoj1026][SCOI2009][windy数] (数位dp)
    [bzoj4521][Cqoi2016][手机号码] (数位dp+记忆化搜索)
    [bzoj1833][ZJOI2010][count] (数位dp)
    [spoj1182][Sorted Bit Sequence] (数位dp)
    [ural1057][Amount of Degrees] (数位dp+进制模型)
    [hdu3652][B-number] (数位dp)
    【bzoj2523】【CTSC2001】聪明的学生
    友情链接(有的是单向的)
  • 原文地址:https://www.cnblogs.com/xiaoli52qd/p/6851546.html
Copyright © 2011-2022 走看看