3

我正在使用 Javascript 对<div>由子元素拆分为 s 的表进行排序。代码以一种方式成功排序,但我需要添加升序和降序排序的功能。

我尝试将调用者添加到表示单击哪个表头的排序属性。我设置了默认设置为 1 的全局变量,然后它们使用 if 语句在 1 和 2 之间翻转以表示升序或降序。

该表只会升序和降序排序一次,并且似乎依赖于在移动下一个表头之前移动其他表头。

JSFiddle的问题在这里

 var OrderAuthor = 1;

function sortUsingNestedText(parent, childSelector, keySelector, caller)
{
        var items = parent.children(childSelector).sort(function(a, b)
        {
                var vA = $(keySelector, a).text();
                var vB = $(keySelector, b).text();
                if (caller.data('order_by') == 'author')
                {
                        if (OrderAuthor == 1)
                        {
                                OrderAuthor = 2;
                                OrderSubject = 1;
                                OrderDate = 1;
                                return (vA < vB) ? -1 : (vA > vB) ? 1 : 0;
                        }
                        else
                        {
                                OrderAuthor = 1;
                                return (vA > vB) ? -1 : (vA < vB) ? 1 : 0;
                        }
                }
        });
        parent.append(items);
}
4

1 回答 1

3

我会这样做http://jsfiddle.net/zdCT6/5/

var sortBy = ""
var asc = true

function sortUsingNestedText(parent, childSelector, keySelector) {
     if (sortBy == keySelector) { asc = !asc } else { asc = true }
     sortBy = keySelector
     var items = parent.children(childSelector).sort(function(a, b) {
        var vA = $.trim($(keySelector, a).text());
        var vB = $.trim($(keySelector, b).text());        
        return ((vA < vB) ? -1 : (vA > vB) ? 1 : 0) * (asc ? 1 : -1);           
    });

    parent.append(items);
 }

方式更简单,您不需要每次都在那里重置这些标志,而且如果分支则相当少

还要注意 trim() 调用。您的 text() 正在返回带有前导空格 chr 的项目,该项目将首先自动移动该项目/

于 2013-03-22T09:03:46.387 回答