css多个第一个和最后一个动态

Posted

技术标签:

【中文标题】css多个第一个和最后一个动态【英文标题】:css multiple first and last dynamic 【发布时间】:2022-01-09 08:51:53 【问题描述】:

我想通过 css 或 js 为行中的每个第一个和最后一个元素动态设置样式。

<div class"box">
<ui>
<li class"one"></li> 
<li class"two"></li> First
<li class"two"></li>
<li class"two"></li>
<li class"two"></li> Last
<li class"one"></li> First
<li class"one"></li>
<li class"one"></li>
<li class"one"></li>
<li class"one"></li>
<li class"one"></li>
<li class"one"></li>
<li class"one"></li> Last
<li class"two"></li> First
<li class"two"></li>
<li class"two"></li>
<li class"two"></li>
<li class"two"></li>
<li class"two"></li> Last
</ui>

.two:last-child 在 ui 中仅选择一个也是最后一个元素,而不是在 .two:last-of-type 的原始相同问题中选择多个

【问题讨论】:

【参考方案1】:

这里是代码的解决方案。

<!DOCTYPE html>
<HTML>
<head>
<title>Try jQuery Online</title>
<script 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" 
type="text/javascript"></script>

<script type="text/javascript">
$( document ).ready(function() 
var cls="one";
var len = $('ui li').length;
$("ui li").each(function(index)

if(cls!=$(this).attr("class"))
$(this).attr("style","background-color:red;");
if(index!=1)

$(this).prev().attr("style","background-color:red;");

cls=$(this).attr("class");


   if(index === (len - 1))
$(this).attr("style","background-color:red;");
   
);

);
</script>
<style>

</style>
</head>
<body>
<UI>
<li class="one">test</li>
<li class="two">First</li>
<li class="two">test</li>
<li class="two">test</li>
<li class="two">Last</li>
<li class="one">First</li>
<li class="one">test</li>
<li class="one">test</li>
<li class="one">test</li>
<li class="one">test</li>
<li class="one">test</li>
<li class="one">test</li>
<li class="one">Last</li>
<li class="two">First</li>
<li class="two">test</li>
<li class="two">test</li>
<li class="two">test</li>
<li class="two">test</li>
<li class="two">Last</li>
</ui>

【讨论】:

【参考方案2】:

您可以尝试以下方法:

var oneList = document.getElementById("bigList").querySelectorAll(".one"); 
oneList.forEach(function (item) 
    if (item.nextElementSibling) 
        var nextSibling = item.nextElementSibling;
        if (nextSibling.classList.contains("two")) 
            item.classList.add("bg-green");
        
    
);

var twoList = document.getElementById("bigList").querySelectorAll(".two"); 
twoList.forEach(function (item) 
    if (item.nextElementSibling) 
        var nextSibling = item.nextElementSibling;
        if (nextSibling.classList.contains("one")) 
            item.classList.add("bg-green");
        
    
);
/* First */
.one + .two, .two + .one 
  background-color: red;


/* Last */
.bg-green, #bigList li:last-child 
  background-color: green;


/* No style on first child */
#bigList li:first-child
  background-color: transparent;
    <div class="box">
        <ul id="bigList">
            <li class="one">1</li> 
            <li class="two">2</li> <!--First-->
            <li class="two">2</li>
            <li class="two">2</li>
            <li class="two">2</li> <!--Last-->
            <li class="one">1</li> <!--First-->
            <li class="one">1</li>
            <li class="one">1</li>
            <li class="one">1</li>
            <li class="one">1</li>
            <li class="one">1</li>
            <li class="one">1</li>
            <li class="one">1</li> <!--Last-->
            <li class="two">2</li> <!--First-->
            <li class="two">2</li>
            <li class="two">2</li>
            <li class="two">2</li>
            <li class="two">2</li>
            <li class="two">2</li> <!--Last-->
        </ul>
    </div>

【讨论】:

@Kinglish 不错,我已经对其进行了编辑以解决该问题。

以上是关于css多个第一个和最后一个动态的主要内容,如果未能解决你的问题,请参考以下文章

第一个和最后一个孩子的CSS [重复]

css3 - css中如何让第一个和最后一个不被选中?

范围的动态第一行和最后一行

css 怎么选择 第一个 class?

第二天

如何使用 CSS 获得特定数字的孩子?