这是我的代码:
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
. 如果你看,JSON 是基于 atagName
和childNode
元素的;因为每个对象都依赖于一个tagName
,所以函数返回一个同名的新元素。
但是这里出了点问题,该函数只返回第二个节点Fragment
:
#document-fragment
|_<div>
|_<p>
|_<span>
<div></div>
</span>
</p>
</div>
这等于:
{
"tagName" : "div",
"childNode" : [{
"tagName" : "p",
"childNode" : [{
"tagName" : "span",
"childNode" : [{
"tagName" : "div"
}]
}]
}]
}
但是,第一个节点发生了什么?