如何更改列表项的css内容属性

问题描述:

我有以下代码,我在其中添加自动内容(从1开始的计数器)到每个li元素中的div项。我对此使用了css:content:counter(step)counter-increment:step如何更改列表项的css内容属性

一切工作正常,但我希望列表中的最后一个元素显示自定义文本,而不是计数器值(目前是5)。我试过content:"MyText"但没有工作。我怎样才能达到这个列表中的最后一个项目?

请注意,我使用jquery添加最后一个列表项,我必须这样做。

$(document).ready(function() { 
 
    $('#progressbar').append('<li id="level4" data-levelscore="45" class="done" style="content:\'A\'">Completed</li>'); 
 
});
body { 
 
    background-color: #ccc; 
 
} 
 
#progressbar { 
 
    margin-bottom: 5px; 
 
    overflow: hidden; 
 
    /*CSS counters to number the steps*/ 
 
    counter-reset: step; 
 
} 
 
#progressbar li { 
 
    list-style-type: none; 
 
    color: white; 
 
    text-transform: uppercase; 
 
    font-size: 10px; 
 
    width: 20%; 
 
    float: left; 
 
    position: relative; 
 
    text-align: center; 
 
} 
 
#progressbar li:before { 
 
    content: counter(step); 
 
    counter-increment: step; 
 
    width: 15px; 
 
    line-height: 15px; 
 
    display: block; 
 
    font-size: 10px; 
 
    color: #333; 
 
    background: white; 
 
    border-radius: 3px; 
 
    margin: 0 auto 5px auto; 
 
} 
 
/*progressbar connectors*/ 
 

 
#progressbar li:after { 
 
    content: ''; 
 
    width: 80%; 
 
    height: 2px; 
 
    background: white; 
 
    position: absolute; 
 
    left: -40%; 
 
    top: 7px; 
 
    z-index: 1; 
 
    /*put it behind the numbers*/ 
 
} 
 
#progressbar li:first-child:after { 
 
    /*connector not needed before the first step*/ 
 
    content: none; 
 
} 
 
/*marking active/completed steps green*/ 
 

 
/*The number of the step and the connector before it = green*/ 
 

 
#progressbar li.active:before, 
 
#progressbar li.active:after { 
 
    background: #ffb723; 
 
    color: white; 
 
} 
 
#progressbar li.done:before, 
 
#progressbar li.done:after { 
 
    background: #42aacc; 
 
    color: white; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div style="margin-top: 0.2em; width: 70%; float: left; text-align: left; color: white; "> 
 
    <ul id="progressbar"> 
 
    <li id="level1" data-levelscore="10" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 1">Level 1</li> 
 
    <li id="level2" data-levelscore="25" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 2">Level 2</li> 
 
    <li id="level3" data-levelscore="35" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 3">Level 3</li> 
 
    <li id="level4" data-levelscore="45" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 4">Level 4</li> 
 
    </ul> 
 
</div>

如果你只需要添加此规则它为我做:

#progressbar li:last-child:before{ 
    content: "A"; 
} 

$(document).ready(function() { 
 
    $('#progressbar').append('<li id="level4" data-levelscore="45" class="done" style="content:\'A\'">Completed</li>'); 
 
});
body { 
 
    background-color: #ccc; 
 
} 
 
#progressbar { 
 
    margin-bottom: 5px; 
 
    overflow: hidden; 
 
    /*CSS counters to number the steps*/ 
 
    counter-reset: step; 
 
} 
 
#progressbar li { 
 
    list-style-type: none; 
 
    color: white; 
 
    text-transform: uppercase; 
 
    font-size: 10px; 
 
    width: 20%; 
 
    float: left; 
 
    position: relative; 
 
    text-align: center; 
 
} 
 
#progressbar li:before { 
 
    content: counter(step); 
 
    counter-increment: step; 
 
    width: 15px; 
 
    line-height: 15px; 
 
    display: block; 
 
    font-size: 10px; 
 
    color: #333; 
 
    background: white; 
 
    border-radius: 3px; 
 
    margin: 0 auto 5px auto; 
 
    position:relative; 
 
    z-index:2; 
 
} 
 
/*progressbar connectors*/ 
 

 
#progressbar li:after { 
 
    content: ''; 
 
    width: 80%; 
 
    height: 2px; 
 
    background: white; 
 
    position: absolute; 
 
    left: -40%; 
 
    top: 7px; 
 
    z-index: 1; 
 
    /*put it behind the numbers*/ 
 
} 
 
#progressbar li:first-child:after { 
 
    /*connector not needed before the first step*/ 
 
    content: none; 
 
} 
 
/*marking active/completed steps green*/ 
 

 
/*The number of the step and the connector before it = green*/ 
 

 
#progressbar li.active:before, 
 
#progressbar li.active:after { 
 
    background: #ffb723; 
 
    color: white; 
 
} 
 
#progressbar li.done:before, 
 
#progressbar li.done:after { 
 
    background: #42aacc; 
 
    color: white; 
 
} 
 

 
#progressbar li:last-child:before { 
 
content:"CUSTOM"; 
 
width:auto; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div style="margin-top: 0.2em; width: 70%; float: left; text-align: left; color: white; "> 
 
    <ul id="progressbar"> 
 
    <li id="level1" data-levelscore="10" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 1">Level 1</li> 
 
    <li id="level2" data-levelscore="25" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 2">Level 2</li> 
 
    <li id="level3" data-levelscore="35" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 3">Level 3</li> 
 
    <li id="level4" data-levelscore="45" class="done" title="" data-placement="bottom" data-toggle="tooltip" data-original-title="level 4">Level 4</li> 
 
    </ul> 
 
</div>

1)更改添加列表项(< li>) id到level5,你有重复的id,那不太好。

2)使用这个CSS更改里的内容:

li#level5:before { 
    content: 'someText'; 
} 

JS Fiddle