2016-10-13 23 views
1

JavaScriptの再帰に問題があります。ここでJavascript再帰の問題

_parseJson: function($object, $j_array) { 

    for (i = 0; i < $j_array.length; i++) { 
     var $el = document_designer.createElement($j_array[i]); 
     $object.append($el); 
     if ($j_array[i].elements.length > 0) { 
      this._parseJson($el, $j_array[i].elements); 
     } 
    } 
} 

両方の関数(parseJsoncreateElement)が "document_designer" と呼ばれるオブジェクトの下にあるコードです。ここにはcreateElement

createElement: function(n) { 
    var $element = $('<' + n['tag'] + '/>'); 
    document_designer.oi++; 
    if (n.id == null) { 
     $element.attr('id', '____element' + document_designer.oi); 
    } 
    document_designer.processElement($element, n); // you may ignore this line 
    return $element; 
} 

processElement関数に問題はありません。あなたも、そのライン

document_designer._parseJson(document_designer.$preview, json_element) 
// $preview is an created object in the `body` 

を無視して、私の親JSONは次のとおりです。http://www.jsoneditoronline.org/?id=c99c77938e5edf91996e4bb267fd09b1

ルート要素が作成され、最初のメインのサブチャイルズが、他のルート要素のサブ要素を使用すると、varを忘れてしまった

+1

あなたの問題は何ですか? – Barmar

+0

ルート要素が作成されていて最初のメインのサブツリーが他のルート要素のサブ要素を作成していません – ahmetertem

+0

@ahmetertem、jsonのサンプルを提供してください。 – autoboxer

答えて

3

を作成していません

for (i = 0; i < $j_array.length; i++) { 

にだからあなたはすべての呼び出しに対して同じグローバルiを使用している

変更:

for (var i = 0; i < $j_array.length; i++) { 

はところで、私はあなたのコードが好きです。

+1

ありがとうございます。私はそれについて考えることさえしなかった...ありがたいです – ahmetertem

+0

@ahmetertemこれは大​​きなJSファイルで起こっていると想像してください。見つけにくいです。 –

+0

私は問題のある部分を投稿しました:)私のファイルはすでに500以上の行です。もう一度ありがとう – ahmetertem