我正在尝试制作一个可步行的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/