以第一个和最后一个“li”为目标在每个“ul”中

发布于 2024-12-01 11:43:03 字数 1002 浏览 0 评论 0原文

我想使用 jQuery 定位“ul”的第一个和最后一个“li”,并相应地向它们添加“first”和“last”类。

我知道使用 jQuery 如果它只是一个简单的“ul”,那么这很容易,但如果“ul”在父“ul”中嵌套了多个“ul”,我会很难找到正确的语法。

下面是 html 标记的示例:

<ul>
    <li><a href="#">Top Level Item</a>
        <ul>
            <li><a href="#">First Sub-Item</a></li>
            <li><a href="#">Last Sub-Item</a>
                <ul>
                    <li><a href="#">First Sub-Sub-Item</a>
                    <li><a href="#">Last Sub-Sub-Item</a></li>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

我需要定位每个子 ul 的所有第一个和最后一个项目,并对每个项目应用一个类。

这是我一直在使用的,但它显然不起作用,因为它将类名仅应用于第一个“li”和最后一个“li”。

jQuery('.topmenu ul li ul li').first().addClass('first');
jQuery('.topmenu ul li ul li').last().addClass('last');

有什么建议吗?

I would like to target the first and last 'li' of a 'ul' using jQuery and add a class of "first" and "last" to them accordingly.

I know that using jQuery this is easy if its just a simple 'ul' but I am struggling with the right syntax if the 'ul' has more than one 'ul' nested in the parent 'ul'.

Here is an example of the html markup:

<ul>
    <li><a href="#">Top Level Item</a>
        <ul>
            <li><a href="#">First Sub-Item</a></li>
            <li><a href="#">Last Sub-Item</a>
                <ul>
                    <li><a href="#">First Sub-Sub-Item</a>
                    <li><a href="#">Last Sub-Sub-Item</a></li>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

I need to target all of the first and last items of each sub-ul and apply a class to each of them.

Here is what I have been using but it is obviously not working as it is applying the class name to only the very first 'li' and the very last 'li'.

jQuery('.topmenu ul li ul li').first().addClass('first');
jQuery('.topmenu ul li ul li').last().addClass('last');

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

土豪我们做朋友吧 2024-12-08 11:43:03

我假设您显示的所有内容都位于“topmenu”类的内容内。如果它是唯一的,我建议将其更改为 ID,并将一个类应用于“第一个 ul”,这样就不必在算法上避免它。

$('.topmenu').find('ul ul li:first-child').addClass('first');
$('.topmenu').find('ul ul li:last-child').addClass('last');

http://jsfiddle.net/aBksB/2/

编辑:反映评论

I'll assume that everything you have shown is inside something with the class "topmenu". I would advise changing this to an ID if it's unique, and applying a class to the "first ul" so it doesn't have to be avoided algorithmically.

$('.topmenu').find('ul ul li:first-child').addClass('first');
$('.topmenu').find('ul ul li:last-child').addClass('last');

http://jsfiddle.net/aBksB/2/

EDIT: to reflect comment

淡墨 2024-12-08 11:43:03

这是使用以下代码的示例

$('ul li ul').find('>li:first').addClass('first').end()
    .find('>li:last').addClass('last');

Here is an example using the code below.

$('ul li ul').find('>li:first').addClass('first').end()
    .find('>li:last').addClass('last');
风铃鹿 2024-12-08 11:43:03

尝试使用CSS选择器first-child和last-child:

jQuery('.topmenu ul li ul li:first-child').addClass('first');
jQuery('.topmenu ul li ul li:last-child').addClass('last');

try using css selector first-child and last-child:

jQuery('.topmenu ul li ul li:first-child').addClass('first');
jQuery('.topmenu ul li ul li:last-child').addClass('last');
浅浅 2024-12-08 11:43:03

使用 > 您可以指定直接子级,如下所示:

$('ul>li').first()

$('ul>li' ).last()

ul>li 仅获取紧邻 ul 节点内的 li 节点。

Using a > you can specify an imediate child, like this:

$('ul>li').first()

$('ul>li').last()

ul>li gets only the li nodes imediately inside an ul node.

时光倒影 2024-12-08 11:43:03

我认为您想要 first-childlast-child

jQuery('.topmenu ul li ul li:first-child').addClass('first');
jQuery('.topmenu ul li ul li:last-child').addClass('last');

I think you want first-child and last-child:

jQuery('.topmenu ul li ul li:first-child').addClass('first');
jQuery('.topmenu ul li ul li:last-child').addClass('last');
血之狂魔 2024-12-08 11:43:03

您可以尝试使用 :first:last 选择器...

You might try using :first and :last selectors...

鸩远一方 2024-12-08 11:43:03
  <ul class="myclass">
        <li>Items</li>
        <li>Items</li>
        <li>Items</li>
   </ul>

jQuery(".myclass li:last").addClass("last");

大多数时候,最后一个孩子的班级没有添加。如果您想将类添加到 li 的最后一个子级,则该脚本非常有效。

  <ul class="myclass">
        <li>Items</li>
        <li>Items</li>
        <li>Items</li>
   </ul>

jQuery(".myclass li:last").addClass("last");

most of the time class to last child not added. The script works perfect if you want to add class to last child of li.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文