现在,请在每个人开始称之为复制之前,阅读情况。我直截了当地知道这个解决方案,但它们 NOT “动态”。让我告诉你我的意思:
使用Ordered list CSS style includes parent number处的解决方案的变体将效果限制为OL
并应用了.parented
,我得到了这个:
ol.parented {
counter-reset: parent;
margin-left: .6875em !important;
}
ol.parented, .parented ol {
list-style: none !important;
}
ol.parented > li:before {
counter-increment: parent;
content: counter(parent) ".";
padding-right: 9px;
}
ol.parented li ol {
counter-reset: child;
}
ol.parented ol li:before {
counter-increment: child;
content: counter(parent) "." counters(child, '.');
padding-right: 9px;
}
这允许
<ol class="parented">
<li>Value 1<ol>
<li>Value 1.1</li>
<li>Value 1.2</li>
<li>Value 1.3</li>
</ol></li>
<li>Value 2<ol>
<li>Value 2.1</li>
<li>Value 2.2</li>
<li>Value 2.3</li>
</ol></li>
<li>Value 3<ol>
<li>Value 3.1</li>
<li>Value 3.2</li>
<li>Value 3.3</li>
</ol></li>
</ol>
看起来像
1. Value 1
1.1 Value 1.1
1.2 Value 1.2
1.3 Value 1.3
2. Value 2
2.1 Value 2.1
2.2 Value 2.2
2.3 Value 2.3
3. Value 3
3.1 Value 3.1
3.2 Value 3.2
3.3 Value 3.3
它不允许跳过值(定义下一个值)。因此,如果我要使用
<ol class="parented">
<li value="4">Value 4<ol>
<li>Value 4.1</li>
<li>Value 4.2</li>
<li>Value 4.3</li>
</ol></li>
</ol>
我得到了
1. Value 4
1.1 Value 4.1
1.2 Value 4.2
1.3 Value 4.3
有谁知道如何操作计数器以使用更新的LI
值反映在生成的列表中?换句话说,我的最后一个片段应该看起来像
4. Value 4
4.1 Value 4.1
4.2 Value 4.2
4.3 Value 4.3
答案 0 :(得分:0)
如果您可以修改HTML以包含自定义属性,那么这将是一个带有伪元素的简单任务:
ol {
list-style: none;
}
li:before {
content: attr(data-value);
display: inline-block;
margin-right: 5px;
}
&#13;
<ol class="parented">
<li data-value="1.">Value 1<ol>
<li data-value="1.1">Value 1.1</li>
<li data-value="1.1">Value 1.2</li>
<li data-value="1.1">Value 1.3</li>
</ol></li>
<li data-value="4.">Value 4<ol>
<li data-value="4.1">Value 4.1</li>
<li data-value="4.2">Value 4.2</li>
<li data-value="4.3">Value 4.3</li>
</ol></li>
</ol>
&#13;
答案 1 :(得分:0)
我最后编写了一些JavaScript来生成一个样式表,其中包含每个LI
的唯一类来设置值。
var lists = document.getElementsByClassName('parented');
for(var i = 0; i < lists.length; i++) {
var test = lists[i].getElementsByTagName('li'), parent = [], cparent = 0, j = 0;
for(var k = 0; k < test.length; k++) {
if((test[k].getElementsByTagName('ol').length + test[k].getElementsByTagName('ul').length) != 0) {
parent.push(test[k]);
k++;
}
}
var style = document.createElement('style');
style.id = 'parented';
document.head.appendChild(style);
style = document.getElementById('parented');
for(var k = 0; k < parent.length; k++) {console.log(cparent);
var pnum = (parent[k].hasAttribute('value') ? parent[k].getAttribute('value') : (parseInt((k < cparent) ? cparent : k) + 1));
cparent = pnum;
var child = parent[k].getElementsByTagName('li'), rule = 'parent' + (i + 1) + pnum, content = pnum;
style.innerHTML = style.innerHTML + '.' + rule + '::before { content: "' + content + '."; }';
parent[k].className = rule;
for(var l = 0; l < child.length; l++) {
rule = 'parent' + (i + 1) + pnum + (l + 1);
content = pnum + '.' + (l + 1);
style.innerHTML = style.innerHTML + '.' + rule + '::before { content: "' + content + '"; }';
child[l].className = rule;
}
}
}
ol.parented {
margin-left: .6875em !important;
}
ol.parented, .parented ol {
list-style: none !important;
}
ol.parented > li:before, ol.parented ol li:before {
padding-right: 9px;
}
<ol class="parented">
<li>Value 1<ol>
<li>Value 1.1</li>
<li>Value 1.2</li>
<li>Value 1.3</li>
</ol></li>
<li value="4">Value 4<ol>
<li>Value 4.1</li>
<li>Value 4.2</li>
<li>Value 4.3</li>
</ol></li>
<li>Value 5<ol>
<li>Value 5.1</li>
<li>Value 5.2</li>
<li>Value 5.3</li>
</ol></li>
<li>Value 6<ol>
<li>Value 6.1</li>
<li>Value 6.2</li>
<li>Value 6.3</li>
</ol></li>
<li value="10">Value 10<ol>
<li>Value 10.1</li>
<li>Value 10.2</li>
<li>Value 10.3</li>
</ol></li>
</ol>
这是一个JSFiddle,如果愿意的话:http://jsfiddle.net/pua0b62s/
如果有人知道如何使用JavaScript做到这一点,那将非常感激,但我不认为这是可能的。我可能是错的,我希望我是,因为这对我来说更有用。 :)