jQuery Tablesorter:通过表外链接对自定义解析器进行排序

时间:2015-02-01 21:26:14

标签: jquery parsing sorting tablesorter

我为此处的任何重复道歉,我已经尝试过对该主题进行搜索但没有成功。我有一个表,我正在使用jQuery TableSorter进行排序,并使用自定义解析器对9列中的5列进行排序。通过表头文本触发时,自定义解析器运行良好,但我想通过表外的链接对表列进行排序。

对于那些没有使用自定义解析器的列,我可以使用以下实现通过表外链接对它们进行排序(参见http://tablesorter.com/docs/example-trigger-sort.html):

$(document).ready(function() { 
$("table").tablesorter(); 
$("#trigger-link").click(function() { 
    // set sorting column and direction, this will sort on the first and third column the column index starts at zero 
    var sorting = [[0,0],[2,0]]; 
    // sort on the first column 
    $("table").trigger("sorton",[sorting]); 
    // return false to stop default link action 
    return false; 
}); 
});

现在我需要一些方法来排序我的列,这些列通过表外的链接使用自定义解析器。例如。我需要一些方法来使用上面的代码来触发以下代码(请参阅http://tablesorter.com/docs/example-parsers.html):

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
    // set a unique id 
    id: 'grades', 
    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(/good/,2).replace(/medium/,1).replace(/bad/,0); 
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
}); 

$(function() { 
    $("table").tablesorter({ 
        headers: { 
            6: { 
                sorter:'grades' 
            } 
        } 
    }); 
});        

任何想法或建议将不胜感激。

干杯,

杰克

1 个答案:

答案 0 :(得分:0)

tablesorter的工作方式是在初始化时,它通过整个表执行并保存来自每个单元的数据。该数据首先由解析器处理并存储在内部数组中。

对列进行排序时,原始tablesorter实际对内部数组进行排序,然后使用交叉引用以排序顺序将表行添加回表中。这甚至适用于外部链接。 Tablesorter对内部数组进行排序,并将行添加回表中。

刷新内部缓存中数据的唯一方法是触发"更新"它将使用解析器重新处理所有表格单元格,以重建内部数组。

所以......如果要对使用自定义解析器的列进行排序,请执行与没有自定义解析器的列完全相同的操作。例如,如果自定义解析器位于第5列,则使外部链接代码如下所示:

$("#trigger-link").click(function() {  
    // apply an ascending sort on the 5th column (zero-based index)
    $("table").trigger("sorton",[ [[4,0]] ]); 
    return false; 
});