为什么我不能在jquery $ .makeArray()创建的Array对象上使用java脚本方法Sort()

时间:2014-11-21 03:58:21

标签: javascript jquery

为什么我不能在jquery api $ .makeArray()创建的Array对象上使用java脚本方法Sort() 对于Eg: 我的DOM有这些元素

<ul id="languages">
 <li>First</li>
 <li>Second</li>
 <li>Third</li>
 <li>Fourth</li>
</ul>

我试图对它们进行排序和追加。

var elems = document.getElementsByTagName( "li" ); var arr = $.makeArray( elems ); arr.sort(); $( arr ).appendTo( "#languages" );

3 个答案:

答案 0 :(得分:0)

您需要使用自定义排序方法根据内容对元素进行排序

//You can use .get() to get an array of elements from a jQuery object
var arr = $("li").get();
arr.sort(function(o1, o2) {
  return $(o1).text().localeCompare($(o2).text())
});
$(arr).appendTo("#languages");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="languages">
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
  <li>Fourth</li>
</ul>

答案 1 :(得分:0)

您必须使用toArray()转换包裹在dom对象周围的jquery对象。

var elems = document.getElementsByTagName( "li" );
var sorted = $(elems).toArray().sort();

答案 2 :(得分:0)

  

这应该是你问题的解决方案 - 希望这会有所帮助

var elems = document.getElementsByTagName( "li" );
var arr = $.makeArray( elems ); 
arr.sort(function(a, b){
    return a.innerHTML > b.innerHTML;
});
$( arr ).appendTo( "#languages" )