jquery根据子元素的大小对ul元素进行排序

jquery根据子元素的大小对ul元素进行排序,jquery,list,function,sorting,children,Jquery,List,Function,Sorting,Children,只是一个关于排序HTML元素的简短问题 如果有超过10个无序列表,其中包含不同大小的子项。 这是一种简单的重新订购方式吗 HTML示例: <div id="wrapper"> <ul> <li>One</li> <li>Two</li> <li>Three</li> </ul> <ul> &

只是一个关于排序HTML元素的简短问题

如果有超过10个无序列表,其中包含不同大小的子项。 这是一种简单的重新订购方式吗

HTML示例:

<div id="wrapper">
    <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
    </ul>
    <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Four</li>
        <li>Five</li>
    </ul>
    <ul>
        <li>One</li>
        <li>Two</li>
    </ul>
</div>

  • 一个
  • 两个
  • 一个
  • 两个
  • 一个
  • 两个
这就是我想要的:

    <div id="wrapper">
    <ul>
        <li>One</li>
        <li>Two</li>
    </ul>
    <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
    </ul>
    <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Four</li>
        <li>Five</li
    </ul>
</div>

  • 一个
  • 两个
  • 一个
  • 两个
  • 一个
  • 两个

  • 五个这对于香草
    .sort()
    来说相当容易

    • 获取元素
    • 拆开它们
    • 分类
    • 将它们添加回DOM
    JavaScript

    var $wrapper = $('#wrapper');
    
    // Get children and detach
    var children = $wrapper.children().detach();
    
    // Sort them
    children.sort(function(a, b) {
        // Compare amount of children
        return $(a).children().length - $(b).children().length;
    });
    
    // Add them back
    $wrapper.append(children);
    

    查看。

    这对于香草
    .sort()
    来说相当简单

    • 获取元素
    • 拆开它们
    • 分类
    • 将它们添加回DOM
    JavaScript

    var $wrapper = $('#wrapper');
    
    // Get children and detach
    var children = $wrapper.children().detach();
    
    // Sort them
    children.sort(function(a, b) {
        // Compare amount of children
        return $(a).children().length - $(b).children().length;
    });
    
    // Add them back
    $wrapper.append(children);
    

    查看。

    在Tims答案的基础上,您可以像这样将此功能包装在jQuery函数中

    $.fn.sortChildren = function(sortCb){
      this.children().detach().sort(sortCb).appendTo(this);
    };
    
    然后,您可以像这样使用它,从而提高可读性和可重用性

    var $wrapper = $('#wrapper');
    
    // Sort them
    $wrapper.sortChildren(function(a, b) {
        // Compare amount of children
        return $(a).children().length - $(b).children().length;
    });
    

    请参见

    基于Tims答案,您可以将此功能包装在jQuery函数中,如下所示

    $.fn.sortChildren = function(sortCb){
      this.children().detach().sort(sortCb).appendTo(this);
    };
    
    然后,您可以像这样使用它,从而提高可读性和可重用性

    var $wrapper = $('#wrapper');
    
    // Sort them
    $wrapper.sortChildren(function(a, b) {
        // Compare amount of children
        return $(a).children().length - $(b).children().length;
    });
    

    请参见

    您能显示到目前为止您尝试过的代码吗?您能显示到目前为止您尝试过的代码吗?