0

可能重复:
如何使用 jQuery 根据 id 对 div 进行排序?

好吧,我很难解决这个问题,实际上直到现在我还没有成功,我正在尝试按 ID 对其他 DIV 中的 DIV 进行排序。所以这就是我的 DIV 在我的页面中的分布方式

<div id="products" >
   <div class="line">
      <div id="Album2">[there are images and even other divs here in each Album]</div>
      <div id="Album1"></div>
      <div id="Album10"></div>
      <div id="Album16"></div>
   </div>
   <div class="line">
      <div id="Album9"></div>
      <div id="Album3"></div>
      <div id="Album4"></div>
      <div id="Album7"></div>
   </div>
   <div class="line">
      <div id="Album5"></div>
      <div id="Album11"></div>
      <div id="Album6"></div>
      <div id="Album13"></div>
   </div>
   <div class="line">
      <div id="Album8"></div>
      <div id="Album14"></div>
      <div id="Album12"></div>
      <div id="Album15"></div>
   </div>
</div>

这应该是我的输出:

  <div id="products" >
       <div class="line">
          <div id="Album1"></div>
          <div id="Album2"></div>
          <div id="Album3"></div>
          <div id="Album4"></div>
       </div>
       <div class="line">
          <div id="Album5"></div>
          <div id="Album6"></div>
          <div id="Album7"></div>
          <div id="Album8"></div>
       </div>
       <div class="line">
          <div id="Album9"></div>
          <div id="Album10"></div>
          <div id="Album11"></div>
          <div id="Album12"></div>
       </div>
       <div class="line">
          <div id="Album13"></div>
          <div id="Album14"></div>
          <div id="Album15"></div>
          <div id="Album16"></div>
       </div>
    </div>

但是我还有一个问题,我所有的产品都列出了,而且不止一页,我实际上能够跟踪它们并制作了一个排序的字符串数组,但我没有同样的运气来使用 DIV。这是我的页面: http ://biscoitofino.jumpseller.com/catalogo

有什么建议么?提前致谢。

4

2 回答 2

4

至少在单个页面的上下文中应该这样做:

var lines = $("#products .line");
var elems = $("#products .line div");
for (var index = 1; index <= elems.length; index++) {
    var elemId = "Album" + index;
    var containerIndex = parseInt((index - 1) / 4);
    var container = lines[containerIndex];
    var elem = document.getElementById(elemId);
    elem.parentNode.removeChild(elem);
    container.appendChild(elem);
}

这是一个例子:http: //jsfiddle.net/dpHyn/

虽然我认为真正的答案是,因为大概您已经拥有一个动态提供专辑列表的服务器,为什么不让服务器在从数据库(或您正在使用的任何其他数据源)加载元素时正确地对元素进行排序)? 这将为您省去所有这些麻烦,并且也可以正常使用分页。

​</p>

于 2012-09-21T02:20:50.973 回答
3
var lines = $("#products > .line"),
    albums = lines.children().toArray(),
    line = -1;

albums.sort(function(a, b) {
    return a.id.replace("Album", "") - b.id.replace("Album", "");
});

$.each(albums, function(i, el) {
    if (!(i % lines.length))
        line += 1;

    lines.eq(line).append(el);
});

或者没有 jquery

var lines = document.querySelectorAll("#products > .line"),
    line = -1;

[].slice.call(document.querySelectorAll("#products > .line > div"))
    .sort(function(a,b) {
        return a.id.replace("Album", "") - b.id.replace("Album", "");
    })
    .forEach(function(el, i) {
        if (!(i % lines.length))
            line += 1;

        lines[line].appendChild(el);
    });
于 2012-09-21T02:20:08.890 回答