Javascript 排序不适用于 IE9?

标签 javascript jquery

问题是我有一个包含联系人的列表,当有人更改他/她的状态时,我尝试将他们移动到列表的顶部。到目前为止一切正常,IE9,Firefox 4 不工作。我向您展示代码:

function sortByStatus()
{

  var divs = getElementsByClassName(document,"status_sort");
  divs.sort(compare);

  for (var i = 0; i < divs.length; i++)
  {
    $("#contact_info").append(divs[i]);
  }
}

function compare(div1, div2)
{
  var id1 = div1.getAttribute("id");
  var id2 = div2.getAttribute("id");
  if (id1 > id2)
    return 1;
  else if (id1 < id2)
    return -1;
  else
    return 0;
}

有什么想法或可能的解决办法吗?谢谢。

更新

我已经尝试过 MrBuuBuu 解决方案,它可以正常工作,因为现在按状态排序可以工作,但字母排序不起作用。我必须更改 MrBuuBuu 解决方案的一部分,即比较函数,因为我将联系人的姓名与代表状态的姓名之前的数字进行比较(例如 2John ,2 表示离线,1 表示在线),所以我必须进行比较与 '<' 和 '>' 并返回 1、-1 或 0。

但最糟糕的是,现在它不适用于 IE7 或 IE8...按状态排序不起作用。

真的很奇怪,有什么想法吗?

最佳答案

document.getElementsByClassName 返回 NodeList,而不是数组。所以你必须先将其转换为数组。我还清理了你的compare()函数。

function compare(div1, div2)
{
  var id1 = div1.id;
  var id2 = div2.id;

  if (id1 < id2) {
      return - 1;
  }
  if (id1 == id2) { 
      return 0;
  }
  return 1;
}

function sortByStatus()
{

  var divs     = document.getElementsByClassName("status_sort");
  var divArray = $.map(divs, function(div) { return div; });

  divArray.sort(compare);

  $.each(divArray, function(i, div){
      $("#contact_info").append(div);     
  });
}

关于Javascript 排序不适用于 IE9?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428236/

相关文章:

javascript - ASP.NET MVC3 表单集合在 jQuery ajax post 期间为 0

javascript - 模式匹配以获取括号之间的字符串

javascript - 如何将辅助方法的输出用作 haml 哈希中的值?

php - 从单独的 .php 表初始化 dataTable

jquery - 使用 jQuery 切换文本

javascript - colResizable JQuery 插件是否支持多语言或 RTL

javascript - jQuery、jCarousel

javascript - Webix Web 皮肤中的样式按钮

javascript - jquery bootstrap datepicker点击事件只触发一次

javascript - 使用 devexpress 在 IE 上滚动条