原生js实现表格按列排序

代码 代码 1084 人阅读 | 0 人回复

<
面击表头,按该列的元素举办排序

[code]            ID      QQ      score              110.0800      230.0600      320.5700      440.5500      560.5300      650.0400      770.0200      880.5100            const order = {      init(param) {        const that = this;        const table = param.el;        if (!table) return;        // TODO: 获得tbody节面        const tbody = table.getElementsByTagName(&#39;tbody&#39;)[0];        console.log(tbody);        // TODO: 获得一切th节面,并将其转为数组        const ths = Array.prototype.slice.call(table.getElementsByTagName(&#39;th&#39;))        // TODO: 获得一切tr节面,并将其转为数组        const trs = Array.prototype.slice.call(table.getElementsByTagName(&#39;tr&#39;))        const list = this.getBodyList(trs.slice(1));        ths.forEach((th, index) => {          // TODO: 请为th绑定面击事变          th.addEventListener(&#39;click&#39;, () => {            // TODO: 判定当前数据能否为降序            const isAsc = this.isAsc(list, index);            // TODO: 假设当前为降序,则将list降序排序;假设当前为降序,则将list降序排序;            list.sort((a, b) => isAsc ? b.value[index] - a.value[index] : a.value[index] - b.value[index]);            // TODO: 将排序后的list从头插进tbody中            for (let i = 0; i </span listspan class="token punctuation"./spanlengthspan class="token punctuation";/span ispan class="token operator"++/spanspan class="token punctuation")/span span class="token punctuation"{/span              span class="token keyword"let/span str span class="token operator"=/span span class="token string"&#39;&#39;/span              span class="token keyword"for/span span class="token punctuation"(/spanspan class="token keyword"let/span j span class="token operator"=/span span class="token number"0/spanspan class="token punctuation";/span j span class="token operator"/span listspan class="token punctuation"[/spanispan class="token punctuation"]/spanspan class="token punctuation"./spanvaluespan class="token punctuation"./spanlengthspan class="token punctuation";/span jspan class="token operator"++/spanspan class="token punctuation")/span span class="token punctuation"{/span                str span class="token operator"+=/span span class="token template-string"span class="token template-punctuation string"`/spanspan class="token string"td/spanspan class="token interpolation"span class="token interpolation-punctuation punctuation"${/spanlistspan class="token punctuation"[/spanispan class="token punctuation"]/spanspan class="token punctuation"./spanvaluespan class="token punctuation"[/spanjspan class="token punctuation"]/spanspan class="token interpolation-punctuation punctuation"}/span/spanspan class="token string"/td/spanspan class="token template-punctuation string"`/span/spanspan class="token punctuation";/span              span class="token punctuation"}/span              listspan class="token punctuation"[/spanispan class="token punctuation"]/spanspan class="token punctuation"./spantrspan class="token punctuation"./spaninnerHTML span class="token operator"=/span strspan class="token punctuation";/span            span class="token punctuation"}/span            span class="token keyword"let/span htmlstr span class="token operator"=/span span class="token string"&#39;&#39;/span            span class="token keyword"for/span span class="token punctuation"(/spanspan class="token keyword"let/span i span class="token operator"=/span span class="token number"0/spanspan class="token punctuation";/span i span class="token operator"/span listspan class="token punctuation"./spanlengthspan class="token punctuation";/span ispan class="token operator"++/spanspan class="token punctuation")/span span class="token punctuation"{/span              htmlstr span class="token operator"+=/span span class="token string""tr"/span span class="token operator"+/span listspan class="token punctuation"[/spanispan class="token punctuation"]/spanspan class="token punctuation"./spantrspan class="token punctuation"./spaninnerHTML span class="token operator"+/span span class="token string""/tr"/spanspan class="token punctuation";/span            span class="token punctuation"}/span            tbodyspan class="token punctuation"./spaninnerHTML span class="token operator"=/span htmlstr          span class="token punctuation"}/spanspan class="token punctuation")/spanspan class="token punctuation";/span        span class="token punctuation"}/spanspan class="token punctuation")/spanspan class="token punctuation";/span      span class="token punctuation"}/spanspan class="token punctuation",/span      span class="token function"getBodyList/spanspan class="token punctuation"(/spanspan class="token parameter"trs/spanspan class="token punctuation")/span span class="token punctuation"{/span        span class="token keyword"return/span trsspan class="token punctuation"./spanspan class="token function"map/spanspan class="token punctuation"(/spanspan class="token punctuation"(/spanspan class="token parameter"trspan class="token punctuation",/span index/spanspan class="token punctuation")/span span class="token operator"=> {          // TODO: 获得tr的一切td节面,并将其转为数组          const tds = Array.prototype.slice.call(tr.children)          // TODO: 将td的内乱容转为数字,��换上面0的值          const val = tds.map(td => td.innerHTML);          return { tr: tr, value: val };        });      },      isAsc(list, index) {        // TODO: 判定list的value中第index个值能否为降序排列        for (let i = 1; i <span class="token operator">
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则