转换以下逻辑而没有箭头功能,因为它在IE中不起作用

时间:2019-01-21 19:44:41

标签: javascript

由于它无法在IE中运行,因此我尝试使用out箭头功能转换以下逻辑

我已经转换了getCellValue。

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

我无法转换比较器const函数和其他逻辑。

const comparer = (idx, asc) => (a, b) => (
    (v1, v2) => v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2) ? 
        v1 - v2 : 
        v1.toString().localeCompare(v2)
)(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx));

document.querySelectorAll('th').forEach(th => th.addEventListener('click', (() => {
    const table = th.closest('table');
    Array.from(table.querySelectorAll('.message-table:nth-child(n)'))
         .sort(comparer(Array.from(th.parentNode.children).indexOf(th), this.asc = !this.asc))
         .forEach(tr => document.getElementById("tblMsgBody").appendChild(tr));

    Array.from(table.querySelectorAll('.show-documents:nth-child(n)'))
         .forEach(tr => {
             var elementId = tr.id.replace("document-handling-", "")
             $("#tr-" + elementId).after(tr)
         });
    })
));

1 个答案:

答案 0 :(得分:-1)

'use strict';

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

document.querySelectorAll('th').forEach(function (th) {
    return th.addEventListener('click', function () {
        var table = th.closest('table');
    Array.from(table.querySelectorAll('.message-table:nth-child(n)')).sort(comparer(Array.from(th.parentNode.children).indexOf(th), undefined.asc = !undefined.asc)).forEach(function (tr) {
        return document.getElementById("tblMsgBody").appendChild(tr);
    });

       Array.from(table.querySelectorAll('.show-documents:nth-child(n)')).forEach(function (tr) {
            var elementId = tr.id.replace("document-handling-", "");
            $("#tr-" + elementId).after(tr);
        });
    });
});