Javascript二级排序

时间:2015-11-19 12:12:56

标签: javascript sorting

我有一份配方清单,如下所示,配方的一部分 (假设值)

<ul class="ing-list">
 <li value="Water" percent ="80" name="Water">Water - 80%</li>
 <li value="Whiskey" percent ="8" name="Water">Whiskey - 8%</li>
 <li value="Beer" percent ="4" name="Beer">Beer - 4%</li>
 <li value="Vodka" percent ="4" name="Vodka">Vodka - 4%</li>
 <li value="Orange" percent ="4" name="Orange">Orange - 4%</li>
</ul>

每次我在这个列表中添加一个新项目时,我运行以下函数按百分比值对其进行排序。

function sortList(){
    var list = $('.ing-list');
    var listItems = list.find('li').sort(function(b,a){ return $(a).attr('percent') - $(b).attr('percent'); });
    list.find('li').remove();
    list.append(listItems);
}

虽然这对函数很好用,但如果百分比相等(可以进入十进制),我还需要按字母顺序对列表进行二次排序。

我目前无法找到一个不使用插件的解决方案。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要更改您定义的编译器,例如:

function(b, a) { 
  var result = $(a).attr('percent') - $(b).attr('percent');

  if (result !== 0) {  
    return result;
  }

  //Do secondary sort decision here:
  if ($(a).attr('name') < $(b).attr('name')) {
    return 1;
  } 

  if ($(a).attr('name') > $(b).attr('name')) {
    return -1;
  }

  return 0;
}