我正在尝试制作一个可步行的DOM树,如下所示:

输入:

<div>
  <span>Foo</span>
  <span>Bar</span>
</div>


输出(类似Python):

{'div': [{'span': 'Foo'},
         {'span': 'Bar'}]}


我想这样遍历它:

elements['div']['span']; // Output is "Foo".


我当前的代码是这样的:

function createObject(element) {
  var object = {};

  if (element.childNodes.length > 0) {
    for (var i = 0; i < element.childNodes.length; i++) {
      object[element.tagName] = createObject(element.childNodes[i]);
    }

    return object;
  } else {
    return element.nodeValue;
  }
}


但是它不起作用(循环不运行)。有人可以帮助解决这个问题吗?

最佳答案

应该怎么办?

If no child         {name: value}
if childs           {name: [
                        {childname: childvalue}
                    ]}


按照这种逻辑,这就是结果。注意应使用nodeName代替tagName。还选择了具有nodeName #Text . If you want to only select elements, add if(element.childNodes [i] .nodeType == 1)`的文本节点:

function createObject(element) {
  var object, childs = element.childNodes;

  if (childs.length > 0) {
    object = [];
    for (var i = 0; i < childs.length; i++) {
        //Uncomment the code if you want to ignore non-elements
        // if(childs.nodeType == 1) {
            object.push(createObject(childs[i]));
        // }
    }

    return object;
  } else {
    object = {};
    object[element.nodeName] = element.nodeValue;
    return object;
  }
}

关于javascript - JavaScript:从DOM创建对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8109823/

10-12 00:11
查看更多