0

我有 html 和 jquery 用于对我的表进行排序(也有非标准排序(使用多 tbody))。

jQuery(function($) {
    var table = $('table');
    $(document).ready(function() {
        on_loaded($('.prcol'));
        $('.prcol').click(function(e) {
            on_loaded(this);
            e.preventDefault();
        });
    });

    function on_loaded(met) {
        var $sort = met;
        var $table = $('#articles-table');
        var $rows = $('tbody.analogs_art > tr', $table);
        $rows.sort(function(a, b) {
            var keyA = $('td:eq(3)', a).text().toUpperCase();;
            var keyB = $('td:eq(3)', b).text().toUpperCase();;

            if (keyA.length > 0 && isNaN(parseFloat($('td:eq(3)', b).text()))) return Ascending(keyA, keyB);
        });
        $.each($rows, function(index, row) {
            //console.log(row);
            $table.append(row);
            //$("table.123").append(row);
        });
    }

});


function Ascending(a, b) {
    if (a > b) return -1;
    if (a < b) return 1;
    return 0;
}

我的代码可以在这里找到:http: //jsfiddle.net/hGCgX/2/

但是为什么它只在 webkit 浏览器中排序呢?在 ff 和 ie 和歌剧中,我没有看到任何变化……但是为什么呢?如何对html表格进行跨浏览器排序?也不要说我使用tablesorter,为什么你有这么多tbodie之类的......

4

2 回答 2

0

我让它在 Opera 中排序如下:

$(function(){
    var $table = $('#articles-table');
    var $tbody = $('tbody.analogs_art', $table);
    var $rows = $tbody.children("tr");

    function on_loaded() {
        Array.prototype.sort.call($rows, function(a, b) {
            var keyA = Number($('td', a).eq(3).text()) || 0;
            var keyB = Number($('td', b).eq(3).text()) || 0;
            return keyB - keyA;
        });
        $.each($rows, function(index, row) {
            $tbody.append(row);
        });
    };
    $table.find("th").eq(3).on('click', function() {
        on_loaded();
    });
});

查看更新的小提琴

于 2012-11-17T03:39:44.120 回答
0

在工作:

  • 铬 22
  • 火狐 11
  • 歌剧 9.64
  • 互联网浏览器 9

更新小提琴:http: //jsfiddle.net/hGCgX/4/

$(document).ready(function () {
    'use strict';
    var on_loaded = function on_loaded(col, css) {
            var rows = $('tbody.analogs_art > tr'),
                frag = $(document.createDocumentFragment()),
                trs = [];
            $.each(rows, function (index, row) {
                var tr = [],
                    val = '';
                if (row.children[col]) {
                    val = row.children[col].textContent;
                    row.children[col].className = css;
                }
                tr.push(val);
                tr.push(row);
                trs.push(tr);
            });
            if (css === 'ascending') {
                trs.sort();
            } else {
                trs.sort();
                trs.reverse();
            }
            $.each(trs, function (index, row) {
                frag.append(row[1]);
            });
            $('tbody.analogs_art').empty().append(frag);
        };
    $('#articles-table th').click(function (e) {
        var index = $('#articles-table th').index(this),
            direction = this.className === 'ascending' ? -1 : 1,
            css = direction > 0 ? 'ascending' : 'descending';
        $('#articles-table th, #articles-table td').removeClass('ascending').removeClass('descending');
        on_loaded(index, css);
        this.className = css;
        e.preventDefault();
    });
});
于 2012-11-17T20:19:01.083 回答