需要忽略JavaScript表排序函数中的文本引号

Need to ignore textual quotes in a JavaScript table sorting function

本文关键字:文本 函数 排序 JavaScript      更新时间:2023-09-26

下面是我的代码:

        function makeSortFunction(type, direction, index) {
            var a = "a[" + index + "]",
                b = "b[" + index + "]";
            if (type == 'text' && direction == 'asc') {
                return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + a + " < " + b + ") ? -1 : 1 )));";
            } else if (type == 'text' && direction == 'desc') {
                return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + b + " < " + a + ") ? -1 : 1 )));";
            } else if (type == 'numeric' && direction == 'asc') {
                return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + a + " - " + b + "));";
            } else if (type == 'numeric' && direction == 'desc') {
                return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + b + " - " + a + "));";
            }
        };
        function makeSortText(i) {
            return "((a[" + i + "] < b[" + i + "]) ? -1 : ((a[" + i + "] > b[" + i + "]) ? 1 : 0));";
        };
        function makeSortTextDesc(i) {
            return "((b[" + i + "] < a[" + i + "]) ? -1 : ((b[" + i + "] > a[" + i + "]) ? 1 : 0));";
        };
        function makeSortNumeric(i) {
            return "a[" + i + "]-b[" + i + "];";
        };
        function makeSortNumericDesc(i) {
            return "b[" + i + "]-a[" + i + "];";
        };
        function sortText(a, b) {
            if (table.config.sortLocaleCompare) return a.localeCompare(b);
            return ((a < b) ? -1 : ((a > b) ? 1 : 0));
        };
        function sortTextDesc(a, b) {
            if (table.config.sortLocaleCompare) return b.localeCompare(a);
            return ((b < a) ? -1 : ((b > a) ? 1 : 0));
        };
        function sortNumeric(a, b) {
            return a - b;
        };
        function sortNumericDesc(a, b) {
            return b - a;
        };
        function getCachedSortType(parsers, i) {
            return parsers[i].type;
        }; /* public methods */

这对我来说非常好,除了任何带有引号的东西(我所有的文章标题都使用单引号),或者在一个实例中一个美元符号,结束在升序排序的顶部。我真的希望有一种方法能把这些东西和列表的其他部分按字母数字顺序排列。

有人能帮忙吗?

默认情况下,tableSorter jQuery插件使用每个单元格的整个文本内容进行排序。你可以通过config.textExtraction过滤器来覆盖这一点,这将在你调用tableSorter插件的代码行中完成。

您没有包含代码的那一部分,所以一般来说,它看起来像这样,包括对自定义文本提取函数的必要调用:

$("#myTable").tableSorter( {textExtraction: myTextExtraction} );

然后编写一个文本提取函数,该函数将删除空格和引号的前后字符。

function myTextExtraction(s) {
  return s.replace(/^['s'"]+|['s'"]+$/g, '');
}

我没有看到任何"smart"(花括号)引号在你的网站上使用,但如果你这样做,那么你需要在字符类中为每种类型的引号添加适当的Unicode代码点。

看了你的网站后…

您只需要将上面的自定义函数myTextExtraction添加到代码中,然后添加额外的textExtraction参数。在检查了站点现有的JavaScript代码之后,像这样的东西可能对您有用:

function myTextExtraction(s) {
  return s.replace(/^['s'"]+|['s'"]+$/g, '');
}
$(function() {
  $("table").tablesorter({
    textExtraction: myTextExtraction, widthFixed: true, widgets: ['zebra']
  }).tablesorterPager({
    textExtraction: myTextExtraction, container: $("#pager");
  });
});

该代码将在您的网站上的当前代码的位置,即:$(function() { $("table") .tablesorter({widthFixed: true, widgets: ['zebra']}) .tablesorterPager({container: $("#pager")}); });