繁体   English   中英

Javascript Tablesorter将数字排序为字符串

[英]Javascript Tablesorter sort numbers as strings

我使用javascript使用JSON生成了一个表,并使用sorttable()函数对我的表进行了排序。

文本排序有效,但是数字排序存在排序器认为数字是字符串的问题。

我该如何解决排序器适用于数字的问题?

 $( document ).ready(function() { var hotspots = "[{\\"path\\": \\"src/main/java/tools/generator/data/RecordPart.java\\",\\"revisions\\": 25,\\"codeLines\\": 18},{\\"path\\": \\"src/main/java/tools/generator/data/RecordTotal.java\\", \\"revisions\\": 55,\\"codeLines\\": 23},{\\"path\\": \\"src/main/resources/test.xml\\",\\"revisions\\": 102,\\"codeLines\\": 44},{\\"path\\": \\"src/main/java/tools/generator/helper/MenuHelper.java\\",\\"revisions\\": 4,\\"codeLines\\": 115}]"; var jsonHotspots = JSON.parse(hotspots); constructTable(jsonHotspots); }); //Construct Table function constructTable(json) { console.debug("Table : " + json); // this will show the info it in firebug console var tbl=$("<table/>").attr("id","mytable"); $("#div1").append(tbl); var tr="<tr>"; var td1='<td onclick="sortTable(0)" >Path</td>'; var td2='<td onclick="sortTable(1)" >Revision</td>'; var td3='<td onclick="sortTable(2)" >CodeLines</td></tr>'; $("#mytable").append(tr+td1+td2+td3); for(var i=0;i < json.length ; i++) { var tr="<tr>"; var td1="<td>"+json[i]["path"]+"</td>"; var td2="<td>"+json[i]["revisions"]+"</td>"; var td3="<td>"+json[i]["codeLines"]+"</td></tr>"; $("#mytable").append(tr+td1+td2+td3); } } //TableSorter function sortTable(n) { var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0; table = document.getElementById("mytable"); switching = true; dir = "asc"; while (switching) { switching = false; rows = table.getElementsByTagName("TR"); for (i = 1; i < (rows.length - 1); i++) { shouldSwitch = false; x = rows[i].getElementsByTagName("TD")[n]; y = rows[i + 1].getElementsByTagName("TD")[n]; if (dir == "asc") { if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { shouldSwitch= true; break; } } else if (dir == "desc") { if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) { shouldSwitch= true; break; } } } if (shouldSwitch) { rows[i].parentNode.insertBefore(rows[i + 1], rows[i]); switching = true; switchcount ++; } else { if (switchcount == 0 && dir == "asc") { dir = "desc"; switching = true; } } } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div> <pre id=mytable></pre> </div> 

行简单if看,如果是行0或1&2,如果是12我的字符串转换为int和工作原理。

function sortTable(n) {
          var table, rows, switching, i, x, y,x1,y1, shouldSwitch, dir, switchcount = 0;
          table = document.getElementById("mytable");
          switching = true;
          dir = "asc";
          while (switching) {
            switching = false;
            rows = table.getElementsByTagName("TR");
            for (i = 1; i < (rows.length - 1); i++) {
              shouldSwitch = false;
                    if(n == 0) {
                        x = rows[i].getElementsByTagName("TD")[n];
                        y = rows[i + 1].getElementsByTagName("TD")[n];
                        if (dir == "asc") {
                            if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
                              shouldSwitch= true;
                              break;
                            }
                        } else if (dir == "desc") {
                            if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
                              shouldSwitch= true;
                              break;
                            }
                        }
                   }else{
                        x = rows[i].getElementsByTagName("TD")[n].innerHTML;
                        y = rows[i + 1].getElementsByTagName("TD")[n].innerHTML;
                        x1 = Number(x)
                        y1 = Number(y)
                        if (dir == "asc") {
                            if (x1 > y1) {
                              shouldSwitch= true;
                              break;
                            }
                        } else if (dir == "desc") {
                            if (x1 < y1) {
                              shouldSwitch= true;
                              break;
                            }
                        }
                   }
           }
            if (shouldSwitch) {
              rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
              switching = true;
              switchcount ++;
            } else {
              if (switchcount == 0 && dir == "asc") {
                dir = "desc";
                switching = true;
              }
            }
          }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM