单元格包含嵌套表时如何对表行进行排序?

时间:2016-11-26 02:02:04

标签: jquery

我正在使用此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()));

但它仍然选择并命令所有行,包括嵌套的行。

1 个答案:

答案 0 :(得分:2)

问题是.findtr 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
希望它有所帮助。