1

私が持っている場合:

<div id="mc"></div>

および次のajax.responseText :

<div id="mc">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
</div>

そして最後に私のJavascriptコード:

var div = document.createElement("div");
div.innerHTML = ajax.responseText;
var divChildren = div.children;
for(var i = 0; i < divChildren.length; i++) {
  var root = divChildren[i];
  var children = root.children;
  var documentRoot = document.getElementById(root.id||"$");
  if(documentRoot) {
    var node = null;
    for(var j = 0; j < children.length; j++) {
      node = children[j];
      documentRoot.appendChild(node);
    }
  } 
}

結果はなぜですか?:

<div id="mc">
  <div>1</div>
  <div>3</div>
  <div>5</div>
</div>
4

1 に答える 1

5

これはchildren、ライブ リストであるためです。つまり、その要素の 1 つを別の場所に追加すると、リストから削除されます。これは、インデックスを削除するたびにインデックスをデクリメントしない限り、順方向の反復を台無しにします。

ここに2つの解決策の例があります...

あなたは減少するでしょうj...

for(var j = 0; j < children.length; j++) {
  node = children[j];
  j--;
  documentRoot.appendChild(node);
}

しかし、すべての要素を追加しているので、 と の間をj行ったり来たりするだけなので、これはあまり意味がありません。0-1

すべての要素を追加しているので、インデックスに何かがある限り、単純にループを実行できます0...

while(children[0]) {
  node = children[0];
  documentRoot.appendChild(node);
}
于 2012-07-14T12:58:43.317 に答える