【问题标题】:jQuery group list items by classjQuery按类分组列表项
【发布时间】:2016-01-29 08:07:08
【问题描述】:

我有一个具有相同类列表项的无序列动态列表。我想将相同的类列表项分组到主ul中的一个ul中。 如何对相同的班级列表项进行分组?

我要转换下面的动态列表

<ul>
    <li class="a1">Some Content</li>
    <li class="a1">Some Content</li>
    <li class="a1">Some Content</li>
    <li class="a1">Some Content</li>
    <li class="a2">Some Content</li>
    <li class="a2">Some Content</li>
    <li class="a3">Some Content</li>
</ul>

进入这个

<ul>
    <li>A1
        <ul>
            <li class="a1">Some Content</li>
            <li class="a1">Some Content</li>
            <li class="a1">Some Content</li>
            <li class="a1">Some Content</li>
        </ul>
    </li>
    <li>A2
        <ul>
            <li class="a2">Some Content</li>
            <li class="a2">Some Content</li>
        </ul>
    </li>
    <li>A3
        <ul>
            <li class="a3">Some Content</li>
        </ul>
    </li>
</ul>

【问题讨论】:

    标签: jquery group-by


    【解决方案1】:

    这里有一个解决方案:

    HTML:

    <ul id="BaseNode">
        <li class="a1">A</li>
        <li class="a1">B</li>
        <li class="a1">C</li>
        <li class="a1">D</li>
        <li class="a2">E</li>
        <li class="a2">F</li>
        <li class="a3">G</li>
    </ul>
    

    jQuery:

    $(document).ready(function(){
        var lis = $("#BaseNode > LI");
        var as = { };
    
        $.each(lis, function(i, el){
            var c = $(el).attr("class");
    
            if(as[c] == null) {
                as[c] = new Array();
            }
    
            as[c].push(el);
        });
    
        $("#BaseNode").empty();
        $.each(as, function(i, el) {
            var li = $("<li>" + i.toUpperCase() + "</li>");
            var ul = $("<ul></ul>");
    
            $(ul).append(el);
            $(li).append(ul);
            $("#BaseNode").append(li);
        });
    });
    

    我还创建了一个jsFiddle,您可以在其中看到结果。我在第一个UL 中添加了ID 只是为了方便。

    【讨论】:

    • 感谢您的提琴,但是#BaseNode > LI 中的内容不会填充到新列表中,它们是空的@erikscandola
    • 我不明白。你什么意思?您是否将BaseNode id 添加到您的第一个ul
    • &lt;ul id="BaseNode"&gt;&lt;li class="a1"&gt;Some Content&lt;/li&gt;... li 的内容(某些内容)未显示在新列表中。 @erikscandola
    • 与原来的问题有点不同。我会为你更新我的代码。
    【解决方案2】:

    试试这个,

    var  	classes = {};
    
    $('ul li').each(function() {
    	classes[$(this).attr('class')] = $(this).attr('class');
    });
     
    $.each(classes,function(entry) {
       $("."+entry).wrapAll("<li>"+entry.toUpperCase()+"<ul></ul></li>");
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <ul>
        <li class="a1">Some Content</li>
        <li class="a1">Some Content</li>
        <li class="a1">Some Content</li>
        <li class="a1">Some Content</li>
        <li class="a2">Some Content</li>
        <li class="a2">Some Content</li>
        <li class="a3">Some Content</li>
    </ul>

    【讨论】:

    • wrapAll。我没想到。好答案:-)
    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 2023-04-02
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多