带有父值的有序列表

时间:2015-07-08 18:47:37

标签: html css html-lists nested-lists

现在,请在每个人开始称之为复制之前,阅读情况。我直截了当地知道这个解决方案,但它们 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

2 个答案:

答案 0 :(得分:0)

如果您可以修改HTML以包含自定义属性,那么这将是一个带有伪元素的简单任务:

&#13;
&#13;
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;
&#13;
&#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做到这一点,那将非常感激,但我不认为这是可能的。我可能是错的,我希望我是,因为这对我来说更有用。 :)