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'
});