Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式对JavaScript中的HTML表进行排序_Javascript_Html_Regex - Fatal编程技术网

使用正则表达式对JavaScript中的HTML表进行排序

使用正则表达式对JavaScript中的HTML表进行排序,javascript,html,regex,Javascript,Html,Regex,我正在尝试用JavaScript制作一个HTML表格排序系统。我只想通过点击对每一列进行排序,但我想我必须使用regex来完成这项工作。你看,我想先对数字(0-9)进行排序,然后按字母顺序(a-z)排序,然后是其他所有字符(特殊字符),最后是空单元格 这是它必须执行的命令 1 03 5 data data1 -data -data1 *empty cells* *empty cells* 下面的代码只能将空单元格排序到底部(代码当前取自): 有人知道解决我问题的简单方法吗 var getCel

我正在尝试用JavaScript制作一个HTML表格排序系统。我只想通过点击对每一列进行排序,但我想我必须使用regex来完成这项工作。你看,我想先对数字(0-9)进行排序,然后按字母顺序(a-z)排序,然后是其他所有字符(特殊字符),最后是空单元格

这是它必须执行的命令

1
03
5
data
data1
-data
-data1
*empty cells*
*empty cells*
下面的代码只能将空单元格排序到底部(代码当前取自):

有人知道解决我问题的简单方法吗

var getCellValue = function(tr, idx) {
    return tr.children[idx].innerText || tr.children[idx].textContent;
}

var comparer = function(idx, asc) {
    return function(a, b) {
        return function(v1, v2) {
            if (v1 == "")
                return 1;
            if (v2 == "")
                return -1;
            return v1 != "" && v2 != "" && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2);
        }(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx));
    }
};

Array.prototype.slice.call(document.querySelectorAll("th.sortable")).forEach(function(th) {
    th.addEventListener("click", function() {
        var table = th.parentNode
        var tbody = document.querySelector("tbody")
        while (table.tagName.toUpperCase() != "TABLE") table = table.parentNode;
        Array.prototype.slice.call(tbody.querySelectorAll("tr"))
            .sort(comparer(Array.prototype.slice.call(th.parentNode.children).indexOf(th), this.asc = !this.asc))
            .forEach(function(tr) {
                tbody.appendChild(tr)
            });
    })
});