Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按排序数组排序_Javascript_Jquery_Html - Fatal编程技术网

Javascript 按排序数组排序

Javascript 按排序数组排序,javascript,jquery,html,Javascript,Jquery,Html,我有一个包含如下表的页面(按“名称”列自动排序) 第二个tr如下所示: <tr id="1"><td class="N">Smith, Sarah</td><td class="O">4</td><td class="T">3</td></tr> 到目前为止,我将数字存储在数组arrQuick中,并将行号存储在不同的数组rowCount中。然后,我使用快速排序方法对数据进行排序,同时对第二个数组进行

我有一个包含如下表的页面(按“名称”列自动排序)

第二个
tr
如下所示:

<tr id="1"><td class="N">Smith, Sarah</td><td class="O">4</td><td class="T">3</td></tr>
到目前为止,我将数字存储在数组
arrQuick
中,并将行号存储在不同的数组
rowCount
中。然后,我使用快速排序方法对数据进行排序,同时对第二个数组进行排序,这非常有效。现在我有了排序数据和行的顺序

问题

我不知道如何正确更新表行

到目前为止,我有这个

for(var i=0;i<rowCount.length;i++){
    var tmpHolder=$("#"+i).html();
    $("#"+i).html($("#"+rowCount[rowCount.length-(i+1)]).html());
    $("#"+rowCount[rowCount.length-(i+1)]).html(tmpHolder);
}

for(var i=0;i您可以根据表格单元格的值对行进行排序。以下方法接受单元格的类名,并根据该单元格的文本内容对行进行排序

$.fn.sortTable = function(cls) {
    this.find('tr').sort(function(a, b){
       return $(a).find('td.'+cls).text() > $(b).find('td.' + cls).text();
    }).appendTo(this.find('tbody'));
}

$('table').sortTable('O');
更新了支持升序和降序的方法

$.fn.sortTable = function (opt) {
    var sort = typeof opt.sortType !== 'undefined' ? opt.sortType : 'asc',
        cls = opt.cls;
    if (!cls) return;

    var $tr = this.find('tbody').children().sort(function(a, b){
       return $(a).find('.' + cls).text() > $(b).find('.' + cls).text();
    });

    if (sort === 'des') {
       $tr = $tr.toArray().reverse();
    }
    this.find('tbody').append($tr);
}

$('table').sortTable({
    cls: 'N',    // className of the cells
    sortType: 'des'  // order 'asc' || 'des' 
});

id不应该只是数字。在HTML5中,id可以是数字的。为什么不呢?行id的唯一用途是这个jQuery更新,所以使它们成为数字和顺序意味着我可以很容易地进行for循环设置。id只是数字没有什么错,但是在这种情况下,根本不需要id。这个库可能有用f mine:它一般允许对象数组的级联排序。但是,它不(按原样)支持降序排序。非常优雅。有没有办法扭转这种情况(降序排序?)但仍然将标题行保留在顶部?不幸的是,在对DESC进行排序时,它会将标题行移动到表的底部。为了解决这个问题,我只在生成的包含标题的表上方放置了一个表,并更改了您的艺术作品以使用表ID。它在GC和IE中似乎也有一些问题,但我喜欢FF,所以我对它没有意见T
$.fn.sortTable = function(cls) {
    this.find('tr').sort(function(a, b){
       return $(a).find('td.'+cls).text() > $(b).find('td.' + cls).text();
    }).appendTo(this.find('tbody'));
}

$('table').sortTable('O');
$.fn.sortTable = function (opt) {
    var sort = typeof opt.sortType !== 'undefined' ? opt.sortType : 'asc',
        cls = opt.cls;
    if (!cls) return;

    var $tr = this.find('tbody').children().sort(function(a, b){
       return $(a).find('.' + cls).text() > $(b).find('.' + cls).text();
    });

    if (sort === 'des') {
       $tr = $tr.toArray().reverse();
    }
    this.find('tbody').append($tr);
}

$('table').sortTable({
    cls: 'N',    // className of the cells
    sortType: 'des'  // order 'asc' || 'des' 
});