【问题标题】:how to make a div sortable?如何使 div 可排序?
【发布时间】:2015-02-02 20:16:48
【问题描述】:

我有一个像页面一样的 div 表,是否可以使用 javascript 使其像 html 表一样可排序?

由于How to add td rowspans to a table?,我无法继续使用它,因此我从普通表移出,因此使用了 div 表。

所以我使用了这个 div 表,我唯一缺少的是如何使其可排序,以便我可以按项目或价格对其进行排序.. 像数据表、tablesorter 等

<div class="Header">    
    <div class="item"><a href="#">Item</a>
    </div>
    <div class="desc"><a href="#">Description</a>
    </div>      
    <div class="price"><a href="#">Price</a>
    </div>    
    <div class="status"><a href="#">Status</a>
    </div>
</div>

<div class="Info">
  <div class="itemName">
    <div class="item">Item 1</div>
  </div>
  <div class="itemInfo">
    <div class="List">
      <div class="Desc">Description 1</div>
      <div class="Box">                
        <div class="price">$79</div>
        <div class="status">16 in stock</div>
      </div>
    </div> 
  </div>
</div>

完整代码在这里http://codepen.io/anon/pen/empqyN?editors=110和这里http://jsfiddle.net/a4fcxzra/

【问题讨论】:

  • 可以使用 rowSpan 创建所需的表。不知道为什么你的其他问题没有得到解答,我刚刚发布了一个关于如何使用 rowSpan stackoverflow.com/a/27303000/297641 的答案
  • 你可以在这个答案中使用类似的东西来订购一个DOM节点列表stackoverflow.com/a/3051100/2414886
  • 感谢您的意见,vega 我会看看情况如何并回复您,sarah 我会看看。

标签: javascript jquery html


【解决方案1】:

您可以使用 JavaScript 对数组进行排序,然后动态创建标签以将它们放置在列标题中(您应该在 html 中创建以提高性能)

【讨论】:

    【解决方案2】:

    这是一个排序处理程序:(标题类需要与信息所在的位置相同,因此在标题中将 desc 更改为 Desc)

    var sorting=1;
    $(".Header div").each(function(){
        $(this).click(function(){
            var cl=$(this).attr("class") // get header class, this is where I get info from
            sorting = sorting == 1 ? -1 : 1 ;         // sorting asc or desc
            $(".Info").detach().sort(function(a,b){
                var str1=$(a).find('.'+cl).text(); // get text
                var str2=$(b).find('.'+cl).text();
                var n1 = str1.match(/\d+/)[0] //get digits in text
                var n2 = str2.match(/\d+/)[0]
                if(n1 != '' ){ // if its a number
                    return n1*sorting > n2*sorting; // sort by number
                }else{ // sort by string
                    return sorting == 1 ? str1 > str2 : str1 < str2
                }
            }).appendTo($(".Header").parent());
        })
    })
    

    工作小提琴:http://jsfiddle.net/juvian/a4fcxzra/1/

    【讨论】:

    • 非常完美,只是将 css 样式更改为 Header .Desc,一切顺利。再次感谢。
    • 我遇到了一些问题如果我更改列表中的任何单词,它将无法正常工作.. 例如这个jsfiddle.net/a4fcxzra/3 我制作了另一个项目并将其命名为游戏手柄,但它不会排序。 . 无论我输入哪个词,我怎样才能让它排序?
    • 嗯,是的,因为我将数字字段处理为数字,所以按 1、2、3、4、5 对项目进行排序。添加了一个函数来覆盖在标题中放置data-type='string'jsfiddle.net/juvian/a4fcxzra/4
    猜你喜欢
    • 2017-01-26
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多