我正在使用此jQuery代码向表添加排序(基于列中的值更改顺序)功能:
$('th.sortBy').click(function(){
var table = $(this).parents('table').eq(0);
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
this.asc = !this.asc;
if (!this.asc){rows = rows.reverse()};
for (var i = 0; i < rows.length; i++){table.append(rows[i])};
});
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index);
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB);
};
};
function getCellValue(row, index){ return $(row).children('td').eq(index).html(); };
但是,在单元格包含另一个表的表上,排序会全部排除 - 它会占用包括嵌套的所有表行,并将它们全部重新排序。当然,我需要嵌套的行保留在他们的表中,而不是在另一个不相关的级别上排序。
我该怎么做才能解决这个问题?
我试图改变
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
到
var rows = table.children('tr:gt(0)').toArray().sort(comparer($(this).index()));
但它仍然选择并命令所有行,包括嵌套的行。
答案 0 :(得分:2)
问题是.find
在tr
var中获得所有 rows
(除了:gt(0)
之外的第一个,因为tr
),甚至是嵌套表中的那些。
基于该考试,我唯一可以建议的是使用第二级.not()
的课程......
因此,您可以使用$('th.sortByOK').click(function(){
var table = $(this).parents('table').eq(0);
var rows = table.find("tr:gt(0)").not(".secondLevel").toArray().sort(comparer($(this).index()));
this.asc = !this.asc;
if (!this.asc){rows = rows.reverse()};
for (var i = 0; i < rows.length; i++){table.append(rows[i])};
});
过滤它们。
C:\Users\Steven>$ pip install Django
CodePen
希望它有所帮助。