Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery group list items by class

I have an unordered dynamic list with same class list items. and I want to group the same class list items into one ul in the main ul. How can I group same class list items?

I want to convert the below dynamic list

<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>

into this

<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>
like image 326
adams Avatar asked Dec 06 '25 05:12

adams


1 Answers

Here a solution for you:

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);
    });
});

I created also a jsFiddle where you can see the result. I added an ID to first UL only for convenience.

like image 103
erikscandola Avatar answered Dec 07 '25 18:12

erikscandola



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!