我想在我的新Object中获取没有textNode的所有元素。我写代码并且没问题:
var el1 = document.childNodes[0]
var x = el1;
function get(node, ob)
{
ob = ob || {};
var parentNode = node;
var node_length = parentNode.childElementCount
var typElem = parentNode.nodeType
var name = parentNode.nodeName;
for (var x = 0; x < node_length; x++)
{
if (node_length > 0)
{
ob[parentNode.childNodes[x].nodeName] = {}
get(parentNode.childNodes[x], ob[parentNode.childNodes[x].nodeName])
}
else
{
}
};
return ob
}
var o = get(el1)
console.log(o)
<html>
<head></head>
<body>
<h1 id="a">Site 3</h1>
<script src="index.js"></script>
</body>
</html>
它告诉我:Object { HEAD: Object, BODY: Object }
没问题,但我想要这样的表示:HTML:{ HEAD: Object, BODY: Object }
如何修改函数以接收这样的结果?
答案 0 :(得分:1)
您的递归函数get
会将node
的子节点添加到ob
,因此它会跳过根html
元素。您要做的是将node
添加到ob
,并确保访问所有子节点。
但是,您的代码还存在其他问题,如果不自己编写整个内容,很难提供一个有效的示例。
您需要做的未经测试的示例是这样的:
// add the *current* node to the object, not the children
ob[parentNode.nodeName] = {};
for (var x = 0; x < node_length; x++) {
// then add the children later
get(parentNode.childNodes[x], ob[parentNode.nodeName]);
}