2016-10-31 8 views
-1

新しいObjectにtextNodeのないすべての要素を取得したい。私は、コードを書いて、okです:オブジェクト表現HTML

var el1 = document.childNodes[0] 
 
var x = el1; 
 

 
function get(node, ob) 
 
{ \t 
 
    ob = ob || {}; 
 
    var parentNode = node; 
 
    var node_length = parentNode.childElementCount 
 

 
    var typElem = parentNode.nodeType 
 
    var name = parentNode.nodeName; 
 
\t 
 
    for (var x = 0; x < node_length; x++) 
 
    { \t \t \t 
 
     if (node_length > 0) 
 
     { 
 
     ob[parentNode.childNodes[x].nodeName] = {} 
 
     get(parentNode.childNodes[x], ob[parentNode.childNodes[x].nodeName]) \t 
 
     } 
 
     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

います 'はconsole.log({HTML::O})'代わり

あなたがする必要があるだろうかのテストされていない例は、このようなものでしょうか?あなたが達成しようとしていることははっきりしていません。何か「見える」ようにしたいのではなく、あなたが期待している価値*をよりよく説明できますか? (なぜなら、コンソール出力の「見た目」を比較することは不正確で、ほとんど役に立たないからです)。 –

+0

私はHTMLelementsをオブジェクトに入れたいと思っています。しかし、親オブジェクトはノードリストの最初の要素でなければなりません。 –

答えて

1

再帰関数getは、nodeの子ノードをobに追加するので、ルートhtml要素をスキップします。代わりにnodeobに追加し、すべての子ノードに必ずアクセスしてください。

あなたのコードには他の問題がありますが、全体を自分で記述することなく実際の例を与えるのは難しいです。

// 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]); 
} 
+0

素晴らしい!!!!ありがとう –