从DOM创建对象
JavaScript: Create Object from DOM
我想做一个可行走的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;
}
}
没有尝试测试,看起来主要问题是您的for ... in
循环-它在Javascript中的工作方式与在Python中的工作方式不同。
for (child in element.childnodes)
应该是一个基于迭代器的循环:
for (var x=0, child; x<element.childNodes.length; x++) {
child = element.childNodes[x];
// etc
}
您还会得到您不期望的文本节点,并且在递归之前应该检查child.nodeType != Node.TEXT_NODE
。
看起来像childNodes。长度不同的浏览器,也许你应该使用hasChildNodes代替?
另外,您是否使用firebug(或任何js调试器)来查看元素是否正确填写?
编辑:我发现什么是错的。不能创建对象的对象。相反,您必须创建对象数组。检查是否有childNodes,如果没有则创建一个对象。
就像你的python输出显示的那样:-)
相关文章:
- 在创建对象后附加一个jquery事件
- 错误:自动化服务器可以't创建对象
- 如何在不使用 new 关键字的情况下从函数创建对象
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 创建对象函数原型和代码是错误的
- 使用Undercore创建对象集合
- 如何在JavaScript中创建对象时使用变量的值
- 正在创建对象的递归列表
- 这两种不同的创建对象文字的方法有什么区别
- 使用 Aurelia动态创建一个 dom 对象
- DOM 直接从他的 HTML 代码创建对象
- JS:将 EventListener 添加到动态创建的 DOM 对象中,这些对象删除 parentNode
- 如何向动态创建的 DOM 对象添加文本
- 有没有一种方法可以创建一个DOM对象,给定其呈现的字符串
- 创建包含DOM对象的备份阵列
- 从DOM创建对象
- 如何使用html dom为国家列表创建对象数组
- 可以用纯JS创建一个dom对象
- 如何在JS/chrome API中创建任意DOM对象的onClick侦听器
- 如何将使用“node-htmlparser”创建的 DOM 对象转换回文本