【问题标题】:How to create a specific sorting function in jQuery Tablesorter?如何在 jQuery Tablesorter 中创建特定的排序功能?
【发布时间】:2012-11-06 04:26:10
【问题描述】:

我正在使用这个很棒的 jQuery Tablesorter 版本:http://mottie.github.com/tablesorter/docs/index.html

一切正常,但现在我遇到了这个问题:在我的表中,我有一列包含篮球运动员的位置。因此,我希望该列按如下逻辑排序:PG-SG-SF-PF-C。

我尝试创建此自定义排序功能 - 请查看我的脚本第 2 列:

$(document).ready(function() { 

    $(".stats").tablesorter({
            sortInitialOrder: 'desc',
            sortRestart: true,
            // Enable use of the characterEquivalents reference 
            sortLocaleCompare: false, 
            // if false, upper case sorts BEFORE lower case 
            ignoreCase: true,
            headers: { 
                0: { 
                        sortInitialOrder: 'asc'
                }, 
                1: { 
                        sortInitialOrder: 'asc'
                },
                2: { 
                        textSorter: function(a, b){ 
                            var positions = {
                                "PG": 0,
                                "SG": 10,
                                "SF": 20,
                                "PF": 30,
                                "C": 40
                            };
                            return ((positions[a] < positions[b]) ? -1 : ((positions[a] > positions[b]) ? 1 : 0)); 
                        },
                        sortInitialOrder: 'asc'
                }
            }
        }
    ); 

});

但是,该列仍像普通文本字符串 (C-PF-PG-SF-SG) 一样按字母顺序排序。

我在哪里犯错了?我在 Javascript 方面不是特别强,所以它可能在排序功能的某个地方。谢谢。

【问题讨论】:

  • 先使用console.log确认是否进入textSorter函数,如果是,检查ab的值。
  • 似乎它永远不会进入排序功能,因为在我添加 console.log("We are here"); 后,Firebug 中没有显示任何内容;进入功能。我不明白这是怎么可能的,我认为一旦单击第 2 列的标题(实际上是表中的第三列),它就必须进入函数。
  • 那么问题就来了,为什么它忽略了你传入所述列的 textSorter 选项。
  • 这里的例子展示了一种完全不同的使用方式...mottie.github.com/tablesorter/docs/…
  • 我无法弄清楚。我试图添加表,列作为函数的参数,但它没有帮助。无论 sortLocaleCompare 配置如何,我都希望排序功能以这种方式工作,因此我没有使用 if (table.config.sortLocaleCompare) 行。

标签: jquery tablesorter


【解决方案1】:

我通过添加自己的解析器来解决这个问题,就像这个问题中显示的那样:Sorting Image and hyperlink columns in a table using JQuery Sorter plugin

我将复制我希望它工作的脚本,希望它可以帮助某人:

$(document).ready(function() { 

    $.tablesorter.addParser({
            // set a unique id 
            id: 'positions',
            is: function(s) {
                    // return false so this parser is not auto detected 
                    return false;
            },
            format: function(s) {
                    // format your data for normalization 
                    return s.toLowerCase()
                            .replace("pg", "d")
                            .replace("sg", "h")
                            .replace("sf", "m")
                            .replace("pf", "r")
                            .replace("c", "v");
            },
            // set type, either numeric or text 
            type: 'text'
    });     

    $(".stats").tablesorter({
            sortInitialOrder: 'desc',
            sortRestart: true,
            headers: { 
                0: { 
                        sortInitialOrder: 'asc'
                }, 
                1: { 
                        sortInitialOrder: 'asc'
                },
                2: { 
                        sorter: 'positions',
                        sortInitialOrder: 'asc'
                }
            }
        }
    );

});

【讨论】:

  • 这确实帮助我解决了自定义排序问题
  • 对我也有帮助。谢谢。注意到第一列是索引 0
  • 谢谢!这正是我所需要的。
  • 谢谢。这真的很有帮助。
  • 我很高兴它仍然有用:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多