2011-05-29 40 views
1

让我向我们展示我的场景和我的问题。追加和排序div

This是DIV的名单是由的categories1按字母顺序jQuery的内容时,页面加载命令:

<div id="container"> 
    <div class="categories"> 
     <div class="categories1"> 
      Ernest 
     </div> 
    </div> 

    <div class="categories"> 
     <div class="categories1"> 
      Andy 
     </div> 
    </div> 

    <div class="categories"> 
     <div class="categories1"> 
      Mark 
     </div> 
    </div> 
</div> 

// result 
Andy 
Ernest 
Mark 

Now,当我尝试添加一个元素,然后订购的元素,有是个麻烦:其实最后插入的元素不排序,但它只是在列表的末尾添加:

<div class="categories"> 
    <div class="categories1"> 
     Buddy 
    </div> 
</div> 

// result 
Andy 
Ernest 
Mark 
Buddy 

这是排序功能:

$(function() { 
    var items = $('.categories1').get(); 

    items.sort(function(x,y) { 
     return $(x).text() > $(y).text(); 
    }); 

    $('#container').empty(); 

    $(items).each(function() { 
     $('#container').append($(this).parent()); 
    }); 
}); 

为什么会这样?我该如何解决它?

+0

就在项目每次追加时间重新排序。 – James 2011-05-29 12:38:28

+0

是我做的,但它不起作用:检查小提琴的例子 – markzzz 2011-05-29 12:39:21

+0

请显示您的排序电话。这可能是时间问题吗?在插入前排序可能吗? – marsbear 2011-05-29 12:41:38

回答

2

不知道这是否是最好的修复,但你可以$.trim文本:http://jsfiddle.net/WEtML/4/

items.sort(function(x,y) { 
    return $.trim($(x).text()) > $.trim($(y).text()); 
}); 
+0

准确地说,我正要说的,正如下面的marsbear所说的,你有一个空白问题。 – 2011-05-29 12:48:58

2

您有一个空白问题。插入后检查您的标记。第一项以空格开始,Buddy则没有。

<div id="container"> 
    <div class="categories"> 
    <div class="categories1"> Andy </div> 
    </div> 
    <div class="categories"> 
    <div class="categories1"> Ernest </div> 
    </div> 
    <div class="categories"> 
    <div class="categories1"> Mark </div> 
    </div> 
    <div class="categories"> 
    <div class="categories1">Buddy</div> 
    </div> 
</div> 
+0

@markzzz你可以用空白修补更新你的第二个例子吗? – marsbear 2011-05-29 12:46:29

+0

是的,这是岩石。但它不能解决我的“真正的问题”,因为我追加的字符串来自JSON对象,并且与元素相同... – markzzz 2011-05-29 12:48:21

+0

thirtydot发布了修复程序。只需使用trim删除排序时的尾部空白(甚至在插入时),它应该可以工作。 – marsbear 2011-05-29 12:52:56