基于字符串输入生成嵌套HTML列表。香草JS

时间:2016-02-09 16:45:23

标签: javascript html-lists

我有一个产生动态嵌套列表的algorythmic问题。在输入时,我得到一个像这样的字符串数组:

[' A',' A',' / B',' // C',' / B&# 39;,' // C',' A',' A']

每个' /'是层次结构中的下一个级别,它是最后一个元素的直接子元素,具有较少的' /'迹象。具有相同数量的' /'标志处于同一水平。

[' A',' // C']或[' // C']等输入无效。

结果应该是层次结构中的HTML列表 一个 一个 -B - C -B - C 一个 甲

到目前为止我做的是: https://jsfiddle.net/k18Lbou7/

import cmath
def quadratic(a, b, c):
    d = float(b**2 - 4*a*c)
    x1 = ((-b)-cmath.sqrt(d))/(2*a)
    x2 = ((-b)+cmath.sqrt(d))/(2*a)
    return [x.real if (x.imag == 0.0) else x for x in [x1, x2]]

关键是我要复制一些键,或者避免不同方法中的最后一个元素。

也许有人可以通过发现不良结果的原因来帮助mi,或者提出解决此功能的不同方法。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

好的,我做了id。这是一个答案。

  function createList(elements, parentElement) {
  var parentsList = [parentElement];
  var depth = 0;
  elements.forEach(function(item) {
    var match = item.text.match(/^\s*(\/+)/);
    if(match) {
        depth = match[0].length;
    } else {
        depth = 0;
    }
    var listElement = document.createElement('li');
    var span = document.createElement('span');
    span.innerHTML = item.text
    listElement.appendChild(span);
    if (parentsList.length-1 == depth) {
        parentsList[parentsList.length-1].appendChild(listElement);
    } else if (parentsList.length-1 < depth) {
        var parentListElement = document.createElement('ul');
      parentListElement.appendChild(listElement);
      parentsList[parentsList.length-1].appendChild(parentListElement);
      parentsList.push(parentListElement);
    } else {
        while (parentsList.length-1 > depth) {
        parentsList.pop();
      }
      parentsList[parentsList.length-1].appendChild(listElement);
    }
  });     
}
var el = document.createElement('ul');

var value = ['Home', '* This is active', '/This is dropdown', '// shhh...', '/ we ♥ you', '//Last one', 'asd', '/Last one', 'Last one']
        .map(function(pLine) {
          return {
            'text': pLine,
            'page_id': null
          };
        });

createList(value, el);

document.body.appendChild(el);