使用javascript sort()订单时遇到问题

时间:2014-04-06 21:48:30

标签: javascript jquery sorting

这是我的html代码,我放入一个数组进行排序。我试图让数字从最低到最高(在ids中)排序。但我的所有代码似乎都是在保持当前顺序的同时从上到下。环顾四周并尝试了一些不同的方法,我还没有找到解决方案。有什么建议?

<a href="#" class="link-sort-list asc">A-Z</a> <a href="#" class="link-sort-list desc">Z-A</a>
<ul id="sortable">
<li id="220" class="p_box"></li>
<li id="221" class="p_box"></li>
<li id="217" class="p_box"></li>
<li id="215" class="p_box"></li>
<li id="219" class="p_box"></li>
<li id="216" class="p_box"></li>
<li id="218" class="p_box"></li>
<li id="214" class="p_box"></li>
<li id="208" class="p_box"></li>
<li id="206" class="p_box"></li>
</ul>

这是我的javascript排序功能。问题可能在这里,但我不确定。

var $list = $('#sortable');
var $myId = [];
var $myId = $(".p_box");
 //Sort Click Buttons
    $('.link-sort-list').click(function(e) {
    if ($(this).hasClass('asc')){
    $list.empty().append($myId.sort(function(a,b){return a < b}));
    } else {
    $list.empty().append($myId.sort());
    }
    e.preventDefault();
    });

3 个答案:

答案 0 :(得分:1)

您必须按ID排序,并按其他方式排序,反转条件

var $list = $('#sortable');

$('.link-sort-list').click(function(e) {
    e.preventDefault();
    if ($(this).hasClass('asc')) {
        $list.find('li').sort(function(a, b) {
            return a.id - b.id;
        }).appendTo($list);
    } else {
        $list.find('li').sort(function(a, b) {
            return b.id - a.id;
        }).appendTo($list);
    }
});

FIDDLE

答案 1 :(得分:1)

我会做this之类的事情:

$("#clickme").click(function(){
    var holder = [];

    $("#sortable").find("li").each(function(){
        holder.push($(this).attr("id"));
    });
    holder.sort();

    var length = holder.length, i = 0, k = 0;
    for (; i < length; i++){
        holder[i] = $("#" + holder[i]);
    }

    $("#sortable").children().remove();

    for (var k = length - 1; k > -1; k--){
        holder[k].insertAfter($("#sortable"));
    }
})

答案 2 :(得分:0)

我没有看到$list$myId来自哪里,但排序中的函数应该是:

return a - b;