2012-08-15 88 views
0

我正在处理一个新项目;就像在javaScript中的模板系统。 所以,这是我的一点代码:for each仅执行数组的最后一个元素

var Tree = (function (_Obj) { 
    var _E, 
     _N; 
    _Obj.forEach (function (e) { 
    _E = document.createDocumentFragment(); 
    if ("tagName" in e) { 
     _N = document.createElement(e.tagName); 
    } 
    if ("childNode" in e) { 
     _N.appendChild(Tree (e.childNode)); 
    } 
    }); 
    _E.appendChild (_N); 
    return _E; 
}); 

这里该函数的参数:

Fragment = [{ // firstNode 
    "tagName" : "div", 
    "childNode" : [{ 
     "tagName" : "p", 
     "childNode" : [{ 
     "tagName" : "string", 
     "childNode" : [{ 
      "tagName" : "span", 
     }] 
     }] 
    }] 
    }, 
    { //secondNode 
    "tagName" : "div", 
    "childNode" : [{ 
     "tagName" : "p", 
     "childNode" : [{ 
     "tagName" : "span", 
     "childNode" : [{ 
      "tagName" : "div" 
     }] 
     }] 
    }] 
    } 
]; 

好;这段代码应该返回一个带有var Fragment的EVERY对象的文档片段;如果你看,JSON基于tagName和childNode元素;对于每个对象都依赖一个tagName,所以该函数返回一个具有相同名称的新元素。

但是这里出了问题;该函数只返回了var片段的第二个节点:

#document-fragment 
|_<div> 
    |_<p> 
    |_<span> 
     <div></div> 
     </span> 
    </p> 
    </div> 

那这等于:

{ 
    "tagName" : "div", 
    "childNode" : [{ 
     "tagName" : "p", 
     "childNode" : [{ 
     "tagName" : "span", 
     "childNode" : [{ 
      "tagName" : "div" 
     }] 
     }] 
    }] 
    } 

但是,什么与第一节点happend?

感谢您的高级:)

PD:对不起,我来自阿根廷。

回答

0
var Tree = (function (_Obj) { 
    var _E, 
     _N; 
    _E = document.createDocumentFragment(); // put this out of forEach 
    _Obj.forEach (function (e) { 
    if ("tagName" in e) { 
     _N = document.createElement(e.tagName); 
    } 
    if ("childNode" in e) { 
     _N.appendChild(Tree (e.childNode)); 
    } 
    _E.appendChild (_N); // put this inside of forEach 
    }); 
    return _E; 
}); 
1

看起来你的forEach循环经过并分配_N到正确的东西,但后来只有整个循环已经通过后追加_N_E。将你的_E.appendChild(_N)移动到每个人的内部和底部。

+0

+1用于解释发生了什么问题。 – jfriend00 2012-08-15 06:01:23

相关问题