JavaScript表のヘッダーをクリックし、表のソートを実現

5657 ワード

現在、vue/reactなどのjsフレームワークに付属するUIフレームワークが多く、表にはヘッダーをクリックしてソートする運動エネルギーが付属しています.その後js/jq手書きの話を小さく考えて、論理的にどのように実現しますか.小さなdemoと書いて、ここで共有します.これは小さな白demoです.
1.説明
1)ページプリセットレイアウトページにはあらかじめヘッダが与えられており,具体的なhtmlコードは以下の通りである.ヘッダのkey属性が後述する.



    demo2


, , 。

id
/** javaScript code....*/ <script> </body> </html> </code></pre> <p>2) : 。 <code>people</code> :</p> <pre><code> var people = [ { id: '001', name: 'celine', age: '18', status: 2 }, { id: '003', name: 'apple', age: '16', status: 0 }, { id: '002', name: 'andy', age: '22', status: 1 }, { id: '005', name: 'hunter', age: '1', status: 0 }, { id: '004', name: 'redis', age: '15', status: 1 }, { id: '019', name: 'mango', age: '18', status: 0 }, ]; </code></pre> <p>3) <br> , ,append <body></body> 。<br> :</p> <pre><code> function getbaseList(ary) { var html = ''; for (var i=0 ; i<ary.length; i++){ var status = ''; switch(ary[i].status){ case 1: status = ' '; break; case 2: status = ' '; break; default: status = ' '; } html += '<tr>'; html += '<td>' + (i+1) + '</td>'; html += '<td>' + ary[i].id + '</td>'; html += '<td>' + ary[i].name + '</td>'; html += '<td>' + ary[i].age + '</td>'; html += '<td>' + status + '</td>'; html += '</tr>'; } $('#baseTable tbody').empty().append(html); } </code></pre> <h3>2. </h3> <p> , , 。<br> :</p> <ul> <li> ?</li> <li> (ASC) (DESC)?</li> </ul> <p><strong>1) </strong><br> 。 , , 。 —— key 。</p> <pre><code> <th key="id">id</th> <th key="name"> </th> <th key="age"> </th> <th key="status"> </th> </code></pre> <p> <code>people</code> 。</p> <p><strong>2) </strong><br> , , ——sort 。 <code>people</code> , sort 。 , 。</p> <p> , , sort ( ); , sort 。</p> <pre><code> $('#baseTable th').on('click', function(){ var sort_ary; if ($(this).attr('sort') == 'desc') { // sort_ary = people.sort(compare($(this).attr('key'),-1)); getbaseList(sort_ary); // sort , $(this).attr('sort', 'asc'); } else { // sort_ary = people.sort(compare($(this).attr('key'),1)); getbaseList(sort_ary); // sort , $(this).attr('sort', 'desc'); } }); </code></pre> <h3>3. </h3> <p> , sort() 。<br> : , 。<br> : <code>prop</code>、 / <code>type</code>。</p> <pre><code> /** * * @param {string} prop key * @param {number} type 1:asc -1:desc * @return {number} */ function compare(prop,type) { return function (obj1, obj2) { var val1 = obj1[prop]; var val2 = obj2[prop]; if (!isNaN(Number(val1)) && !isNaN(Number(val2))) { val1 = Number(val1); val2 = Number(val2); } if (val1 < val2) { return 0-type; } else if (val1 > val2) { return type; } else { return 0; } } } </code></pre> <h3>4. </h3> <p> , table-sort.html。<br> , , reverse() JavaScript- </p> </article> </div> </div> </div> <!--PC WAP --> <div id="SOHUCS" sid="1243454412228251648"></div> <script type="text/javascript" src="/views/front/js/chanyan.js">