jQuery表排序代码仅适用于Mozilla Firefox

时间:2016-08-01 22:02:17

标签: javascript jquery html

我使用了charlietfl对StackOverflow中的this问题的答案,对1月到12月的HTML表格中的月份列进行排序。我刚修改了一些东西,所以我可以在我的网站上使用它。我也在使用tablesorter,因此我可以按字母顺序对其他表格列进行排序。问题是它只适用于Mozilla Firefox。其他浏览器不会对月份列进行排序。有时 包装表头的tr跳出thead标签并进入tbody标签。这是我的表:http://makzel.com/problems/

导致这种情况的原因是什么?

这是我的完整jquery代码:

(function($) {

    'use strict';

    var $window = $(window);

    $window.ready(function(){

        // Enable sorting for tables
        $(".tablesort").tablesorter({
            headers: {
                0: {
                    sorter: false
                }
            }
        }); 

        // Sort by month
        $('.tablesort th').click(function(){
            var sorters =['January','February','March','April','May','June','July','August','September','October','November','December']

                    var $rows = $('tr:gt(0)').sort(function(a, b){
                        var aSrcIdx =sorters.indexOf( $(a).find('td:first').text() );
                        var bSrcIdx = sorters.indexOf( $(b).find('td:first').text());

                        return aSrcIdx >  bSrcIdx;    
                    });

            $(this).closest('.tablesort').append($rows);
        });

        // Tablesort header background change on click
        $(".tablesort th").click(function(){
            $('.tablesort th').not(this).removeClass('sorted');
            $(this).toggleClass('sorted');
         });

        function postOverflow() {
            if ($window.width() < 768) {
                $('.tablesort').closest('.post').css("overflow","scroll");

            } else{
                $('.tablesort').closest('.post').css("overflow","none");
            }
        }
        postOverflow();
        $window.resize(postOverflow);

    }); // Ready

})(jQuery);

以下是显示跳出thead标记的tr标记的链接:http://cms5.revize.com/revize/haddonfield/departments/table_sort_test/index.php

1 个答案:

答案 0 :(得分:1)

根据documentation of array.sort,请尝试返回-1以将a置于b之下,0将其保持不变,或将1 b置于a之下}。 尝试更换:

return aSrcIdx > bSrcIdx;    

return aSrcIdx < bSrcIdx ? -1 : bSrcIdx < aSrcIdx ? 1 : 0;