0

これは私のコードです:

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要素に基づいています。各オブジェクトは one に依存するtagNameため、関数は同じ名前の新しい要素を 1 つ返します。

しかし、ここで何か問題が発生します。関数は次の の 2 番目のノードのみを返しますFragment

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

これが次と等しいこと:

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

しかし、FIRST NODE はどうしたのでしょうか。

4

2 に答える 2

1

forEach ループが通過して適切なものに割り当てられているように見えますが、ループ全体が通過した後に_Nのみ追加_Nされます。それぞれの内側と下に_E移動します。_E.appendChild(_N)

于 2012-08-15T05:45:30.070 に答える
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;
});
于 2012-08-15T05:45:16.397 に答える