【问题标题】:jquery Tablesorter - natural sort order?jquery Tablesorter - 自然排序顺序?
【发布时间】:2023-03-20 23:58:01
【问题描述】:

我查看了为 tablesorter 列出的所有答案,但找不到我要查找的内容。

我有一张我正在尝试排序的表,其中一列包含产品型号,其中包括字母和数字,问题是它按字母顺序排序,但没有按正确顺序排列数字。例如排好序的列是这样的:

STRB 18, STRB 19, STRB 2, STRB 20, STRB 23 - 你明白了。

我已经收集到我需要此列按自然顺序排序,但我没有任何 js 印章可以做到这一点。如果有人能指出我正确的方向,我将不胜感激!

【问题讨论】:

  • 据我所知,这称为“字典排序”。
  • 我想补充一点,我已经在我的 github fork 中的 tablesorter 插件中添加了一个字母数字排序,以防你仍然感兴趣。

标签: javascript jquery tablesorter


【解决方案1】:

jquery tablesorter 插件提供了编写自己的解析器的能力。

查看示例并试一试!

http://tablesorter.com/docs/example-parsers.html

【讨论】:

  • 谢谢丹,我已经看到了,但不知道怎么做,你会从我上面的 cmets 看到我想出了另一种方法。非常感谢您的帮助。
【解决方案2】:

取自我的一些旧代码

compare = {
    natural: function(a, b) {
        function prepare(s) {
            var q = [];
            s.replace(/(\D)|(\d+)/g, function($0, $1, $2) {
                q.push($1 ? 1 : 2);
                q.push($1 ? $1.charCodeAt(0) : Number($2) + 1)
            });
            q.push(0);
            return q;
        }
        var aa = prepare(a), bb = prepare(b), i = 0;
        do {
            if(aa[i] != bb[i])
                return aa[i] - bb[i];
        } while(aa[i++] > 0);
        return 0;
    }
}

使用示例

test = ['img100b', 'img21', 'img18', 'img100a', 'img1', 'img2']
console.log(test.sort(compare.natural))

【讨论】:

  • 当我在 wordpress 中使用 query_posts 发现它时,我正准备尝试这个,但感谢您的努力,非常感谢!
【解决方案3】:

不确定您所说的“自然”顺序是什么意思,但我猜您的意思是 strb 2 会在 strb 18 之前。

您上面的顺序对于字符串是正确的。如果您想按数字部分排序(假设所有 strb 始终相同),您将不得不做一个子字符串来仅获取数字,然后对数据进行排序。

我也不会在 javascript 中这样做。让你的数据库为你工作,让它处理数据的顺序。它会为你省去很多痛苦。

【讨论】:

  • 非常感谢 Limey 的回复,我实际上更喜欢在 php 中执行此操作 - 此表实际上会显示在 WordPress 站点中 - 有关如何进行此操作的任何提示?
  • 你为什么不让数据库来做呢?如果你等到你的 php 代码,你只是增加了额外的处理时间,因为你的数据库将能够比自定义 PHP 作业更快地排序。
  • 这是我发现“自然排序”术语 codinghorror.com/blog/2007/12/… 的地方 - 最终 query_posts 在 wordpress 中帮了我大忙,根本不需要使用 js。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多