尝试按字母顺序排列jQuery UI手风琴;适用于IE以外的一切

时间:2013-05-09 02:06:47

标签: javascript jquery jquery-ui internet-explorer

我正在尝试使用客户端类型的jQuery UI手风琴,按标题文本的字母顺序放置手风琴部分。

jQuery UI结构由类别标题的h3和该类别内容的后续div组成。因此,我需要对h3文本进行排序,但是在DOM中将每个h3及其后续div串联起来。

我有以下功能可以在FF和Chrome中使用,但不适用于IE的任何风格:

function sort_accordion_headers() {
    var tempArray = [];
    //Push h3-div pairs into array
    $('.accordion h3').each(function(i,ui) {
        tempArray.push(new accordion_sort_object(ui,$(ui).next('div')));
    });
    //Sort the array on header text
    tempArray.sort(function(a,b) {
                var keyA = $(a.header).text();
                var keyB = $(b.header).text();
                return (keyA > keyB) ? 1 : 0;   
    });
    //Clear accordion contents and replace with re-sorted content
    for (var i in tempArray) {
        $('.accordion').append(tempArray[i].header).append(tempArray[i].div); 
    }
}

//Creates custom object for sorting accordion headers
function accordion_sort_object($htag,$div) {
    this.header = $htag;
    this.div = $div;
}

知道为什么这在IE中不起作用?感觉它必须与append()或sort()函数有关,但我不确定是什么。

编辑:澄清一下,它不会在IE中抛出错误;它只是不执行排序。手风琴部分保持其原始顺序。

编辑:问题解决了!感谢Plalx指出当KeyA小于KeyB时我返回0,当我应该返回-1时。

1 个答案:

答案 0 :(得分:2)

  

sort方法对Array对象进行排序;没有新的Array对象   在执行期间创建。如果您提供的功能   sortFunction参数,它必须返回以下值之一:

     
      
  • 如果传递的第一个参数小于第二个参数,则为负值。
  •   
  • 如果两个参数相同则为零。
  •   
  • 如果第一个参数大于第二个参数,则为正值。
  •   

取自http://msdn.microsoft.com/en-us/library/ie/4b4fbfhk(v=vs.94).aspx

['b', 'a'].sort(function (a, b) { return a > b? 1 : (b > a? -1 : 0) }); //a, b