Sorting Divs in jQuery by Custom Sort Order

后端 未结 6 688
名媛妹妹
名媛妹妹 2021-01-31 11:35

I\'m trying to re-sort the child elements of the tag input by comparing their category attribute to the category order in the Javascript variable category_sor

6条回答
  •  甜味超标
    2021-01-31 12:01

    I thought this was a really interesting problem, here is an easy, but not incredibly performant sorting solution that I came up with.

    You can view the test page on jsbin here: http://jsbin.com/ocuta

    function compare(x, y, context){
      if($.inArray(x, context) > $.inArray(y, context)) return 1; 
    }
    function dom_sort(selector, order_list) {
     $items = $(selector);
     var dirty = false;
     for(var i = 0; i < ($items.length - 1); i++) {
      if (compare($items.eq(i).attr('category'), $items.eq(i+1).attr('category'), order_list)) {
       dirty = true;
       $items.eq(i).before($items.eq(i+1).remove());
      }
     }
     if (dirty) setTimeout(function(){ dom_sort(selector, order_list); }, 0); 
    };
    dom_sort('#input div[category]', category_sort_order);
    

    Note that the setTimeout might not be necessary, but it just feels safer. Your call.

    You could probably clean up some performance by storing a reference to the parent and just getting children each time, instead of re-running the selector. I was going for simplicity though. You have to call the selector each time, because the order changes in a sort, and I'm not storing a reference to the parent anywhere.

提交回复
热议问题