简体   繁体   中英

How to find the last ul in every li using jquery?

I have a list

<ul class="mtree default">
    <li class="cat-item cat-item-224 cat-parent mtree-node mtree-open">
        <a href="#" style="cursor: pointer;">Lidingö</a>
        <ul class="children mtree-level-1">

            <li class="cat-item cat-item-444">
                <a href="#" style="cursor: pointer;">Direktåtkomst Förrådslänga</a>
                <ul class="children mtree-level-2">
                    <li class="cat-item cat-item-504">
                        <a>7 kvm (1199 kr/mån)</a>
                    </li>
                </ul>
            </li>

            <li class="cat-item cat-item-314">
                <a href="#" style="cursor: pointer;">Hissplan</a>   
                <ul class="children mtree-level-2">
                    <li class="cat-item cat-item-674">
                        <a href="#">0,5 kvm (349 kr/mån)</a>
                    </li>
                </ul>
            </li>

        </ul>
    </li>

</ul>

Do you know how can I find the last ul of .cat-item-444 and cat-item-314 then select 7 kvm (1199 kr/mån) and 0,5 kvm (349 kr/mån) in one jquery code? The selected tag should have .css('border', '1px solid red');

To achieve this you can use the :last-child selector to find the last li within each sub-level ul , like this:

 $('.cat-item > ul li ul li:last-child').addClass('foo');
 .foo { border: 1px solid red; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="mtree default"> <li class="cat-item cat-item-224 cat-parent mtree-node mtree-open"> <a href="#" style="cursor: pointer;">Lidingö</a> <ul class="children mtree-level-1"> <li class="cat-item cat-item-444"> <a href="#" style="cursor: pointer;">Direktåtkomst Förrådslänga</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-504"> <a>7 kvm (1199 kr/mån)</a> </li> </ul> </li> <li class="cat-item cat-item-314"> <a href="#" style="cursor: pointer;">Hissplan</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-674"> <a href="#">0,5 kvm (349 kr/mån)</a> </li> </ul> </li> </ul> </li> </ul>

If you only want to get the li in the second level, and there are multiple lower levels then you'd need to add additional child selectors, something like .cat-item > ul > li > ul > li:last-child , but the above will work given the provided HTML.

Also note the use of addClass() over css() . This is preferred as you don't really want to put any styling rules directly in JS; they belong in CSS.

what about a dynamic version :)

 $(".cat-item li:not(:has('ul')) a").addClass('foo');
 .foo { border: 1px solid red; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="mtree default"> <li class="cat-item cat-item-224 cat-parent mtree-node mtree-open"> <a href="#" style="cursor: pointer;">Lidingö</a> <ul class="children mtree-level-1"> <li class="cat-item cat-item-444"> <a href="#" style="cursor: pointer;">Direktåtkomst Förrådslänga</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-504"> <a>7 kvm (1199 kr/mån)</a> </li> </ul> </li> <li class="cat-item cat-item-314"> <a href="#" style="cursor: pointer;">Hissplan</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-674"> <a href="#">0,5 kvm (349 kr/mån)</a> </li> </ul> </li> </ul> </li> </ul>

Try this :

 $('.children li.cat-item').each(function() { console.log($(this).find('ul:last-child li a').text()); });
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="mtree default"> <li class="cat-item cat-item-224 cat-parent mtree-node mtree-open"> <a href="#" style="cursor: pointer;">Lidingö</a> <ul class="children mtree-level-1"> <li class="cat-item cat-item-444"> <a href="#" style="cursor: pointer;">Direktåtkomst Förrådslänga</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-504"> <a>7 kvm (1199 kr/mån)</a> </li> </ul> </li> <li class="cat-item cat-item-314"> <a href="#" style="cursor: pointer;">Hissplan</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-674"> <a href="#">0,5 kvm (349 kr/mån)</a> </li> </ul> </li> </ul> </li> </ul>

Use .last() :

 $('.cat-item-444 ul li').last().css('border','1px solid red'); $('.cat-item-314 ul li').last().css('border','1px solid red'); debugger
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="mtree default"> <li class="cat-item cat-item-224 cat-parent mtree-node mtree-open"> <a href="#" style="cursor: pointer;">Lidingö</a> <ul class="children mtree-level-1"> <li class="cat-item cat-item-444"> <a href="#" style="cursor: pointer;">Direktåtkomst Förrådslänga</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-504"> <a>7 kvm (1199 kr/mån)</a> </li> </ul> </li> <li class="cat-item cat-item-314"> <a href="#" style="cursor: pointer;">Hissplan</a> <ul class="children mtree-level-2"> <li class="cat-item cat-item-674"> <a href="#">0,5 kvm (349 kr/mån)</a> </li> </ul> </li> </ul> </li> </ul>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM