2011-03-17 59 views
0

我不明白爲什麼失敗:JavaScript的遞歸元素創建失敗

var recursiveElementGenerator = function (elem_spec) { 
    elem = document.createElement(elem_spec.tag); 

    if (elem_spec.children) { 
     for (var i=0; i<elem_spec.children.length; i++) { 
      var c_elem = elem_spec.children[i]; 
      var n_elem = recursiveElementGenerator(c_elem); 
      alert(elem===n_elem); 
      elem.appendChild(n_elem); 
     }; 
    }; 
    return elem; 
}; 

elem_spec對象有標籤和屬性的兒童,後者是相似對象的數組。

這會失敗,因爲遞歸調用返回的元素與遞歸調用之前創建的元素相同。我沒有得到 - 一個類似的版本,它通過從一個pop()調用獲得它的標記值鏈,然後傳遞給遞歸調用。

+0

我會看看'elem_spec'參數。你可以發佈一個樣本嗎? – 2011-03-17 01:03:17

回答

2

嘗試使用:

var elem = document.createElement(elem_spec.tag); 

代替:

elem = document.createElement(elem_spec.tag); 

不使用var關鍵字,使您的變量在全球範圍內進行操作。使用它將在本地範圍內創建變量,從創建的行到函數定義的末尾。

+0

+1好抓!全局變量已用於遞歸調用。這就是爲什麼'n_elem'總是指向與'elem'全局變量相同的對象。 – 2011-03-17 12:53:43

+0

那麼,使用var關鍵字解決問題呢? – Marcelo 2011-03-17 13:25:01

+0

是的,這是一個很棒的時刻 - 謝謝 - 我試着upvote /接受今天上午,但stackoverflow是在一些小故障時刻,不會採取我的輸入 – chernevik 2011-03-18 01:18:28