鉴于以下DOM:
<ul>
<li><a class="section_0">section_1 item_1</a></li>
<li><a class="section_0">section_1 item_2</a></li>
<li><a class="section_1">section_2 item_1</a></li>
<li><a class="section_1">section_2 item_2</a></li>
<li><a class="section_2">section_3 item_1</a></li>
<li><a class="section_2">section_3 item_2</a></li>
</ul>
如何选择每个部分的最后一项,从字符串&#34;部分_&#34;开始,除了最后一部分?
我不想更改DOM结构,因为它定义了子菜单树。
目标是在每个部分下面画一条线。
编辑:或者我可以为每个部分的最后一个元素添加一个特定的类,但我不愿意。
答案 0 :(得分:0)
显然他们考虑过css3的contains()
选择器,但它不存在。查看Is there a CSS selector for elements containing certain text?问题以供参考。
我认为最好的解决方案就是你建议的,在每个部分的最后一个部分添加一个类名,使其更易读,并且可以用css轻松选择。
答案 1 :(得分:0)
按类名定义布局绝对是一个坏主意,如果你可以帮助它,改变布局。
到目前为止,最好的方法是每个部分制作一个ul
并执行:
ul:not(:last-child)>li:last-child { color: red; }
使用此标记:
<ul>
<li><a class="section_0">section_1 item_1</a></li>
<li><a class="section_0">section_1 item_2</a></li>
</ul>
<ul>
<li><a class="section_1">section_2 item_1</a></li>
<li><a class="section_1">section_2 item_2</a></li>
</ul>
<ul>
<li><a class="section_2">section_3 item_1</a></li>
<li><a class="section_2">section_3 item_2</a></li>
</ul>
<强> RESULT 强>
答案 2 :(得分:0)
您可以尝试li:not( :last-child) > a[class^="section_"]
。这应该选择所有a
,其类别以&#34; section _&#34;开头。无论数字如何,但最后li
都没有。如果您需要设置包含节链接的li
样式,则需要将类移动到li
标记,因为CSS选择器当前无法指定&#34; parent&#34;标签
答案 3 :(得分:0)
根据你的例子,我假设项目的数量是静态的,并且所有部分都相同,那么你可以使用这个CSS选择器。
document.querySelectorAll('li:nth-child(2n):not(:last-child)')
2n
表示每一秒:not(:last-child)
排除列表中的最后一个元素