JQuery按值排序div,如果值为零则跳过

时间:2012-09-25 18:15:54

标签: javascript jquery sorting

我已经在我的代码中完成了我的订购,但是我没有重新加载整个json结果,而是希望客户端为我的div重新排序。

我订购的C#代码是:

.OrderBy(p=> p.order == 0? int.MaxValue : p.order);

这给我的结果如

  • 1
  • 2
  • 3
  • 4
  • 0
  • 0
  • 0

我的Html架构就像

<div class="item" data-sort="0" id="5051fb7c746eed1bf05309db">
 <span>Some values</span>
 <span>Some values</span>
  <div class="subgroups">
    <div class="item" data-sort="null" id="5060de4a746eed1b44cc6e90"></div>
  </div> <!-- closing subgroups -->
</div> <!-- closing main div which need to be sorted -->

<div class="item" data-sort="2" id="5051fb7c746eed1bf05309db">
  <span>Some values</span>
  <span>Some values</span>
  <div class="subgroups">
    <div class="item" data-sort="null" id="5060de4a746eed1b44cc6e90"></div>
  </div> <!-- closing subgroups -->
</div> <!-- closing main div which need to be sorted -->

<div class="item" data-sort="0" id="5051fb7c746eed1bf05309db">
  <span>Some values</span>
  <span>Some values</span>
  <div class="subgroups">
    <div class="item" data-sort="null" id="5060de4a746eed1b44cc6e90"></div>
  </div> <!-- closing subgroups -->
</div> <!-- closing main div which need to be sorted -->

如何对这些div进行重新排序,以便第二个成为第一个,而有0个数据的那个将在重新排序后持续。

2 个答案:

答案 0 :(得分:2)

如果您正在使用jQuery,请查看jQuery插件TinySort。以下是其使用示例:

$(".item").tsort({ attr: 'data-sort',order:'desc'});

我认为如果你可以输出0或-1而不是null到data-sort属性,它应该把这些项放在最后。

答案 1 :(得分:0)

你也可以这样做:

将所有div放在父div中

<div id="parentDiv">
..
</div>

然后你可以像这样排序

$(function(){

  function sort_comp(a, b){
    var k1 = parseInt($(a).attr("data-sort"),10);
    if(k1 === 0) k1 = Number.MAX_VALUE;
    var k2 = parseInt($(b).attr("data-sort"),10);
    if(k2 === 0) k2 = Number.MAX_VALUE;
    return (k1-k2);
  }

  var arr = $.makeArray($("#parentDiv > .item"));
  arr.sort(sort_comp);
  $("#parentDiv > .item").remove();
  $(arr).each(function(){
    $("#parentDiv").append($(this));
  });
});