对象表示HTML

时间:2016-10-31 18:29:50

标签: javascript html object

我想在我的新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 }

如何修改函数以接收这样的结果?

1 个答案:

答案 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]);
}