1

Javascript でページを分割する際に問題が発生しました。17 個の p タグを 1 つの div タグに移動したいと考えています。したがって、次のような 34 個の p タグがあります。

<p>1</p> <!-- Each p tag have the value is the number of the p tag -->

そして、私はこのJavascriptコードを持っています:

  var p = document.getElementsByTagName("p");
  var div = document.createElement("div");
  for(i=0;i<17;i++){
    div.appendChild(p[i]);
  }
  document.getElementsByTagName("body")[0].appendChild(div);

そして、私が受け取った結果は div タグにあります。17 個の p タグがありますが、これらの p タグの値は奇数です。つまり、次のようになります。

1

3

5

7

9

11

13

15

17

19

21

23

25

27

29

31

33

これはデモです: http://jsbin.com/eyivic

それまでの間、div タグの p タグを次のようにしたいと考えています。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

それで、問題は何ですか?どうすれば修正できますか?本当にありがとうございます!

4

2 に答える 2

3

appendChilddivを作成すると、p配列の要素が削除されます。これにより、この「オッズのみ」の動作が発生します。4 つの p 要素があるとします。

1, 2, 3, 4

appendChildfromを作成するp[0]と、期待どおりに p 要素が移動しますが、リストは次のようになります。

2, 3, 4

p[1]あなたは今、それが要素 2 であると予想していた を指していますが、代わりに要素 3 になります。

それを修正するには、いつでも指し示すことができp[0]、期待どおりに動作します。

于 2012-10-20T06:04:17.073 に答える
2

ループは次のようになります。

for(i=0;i<p.length;i++){
    var newNode = p[i].cloneNode(true);
    div.appendChild(newNode);
  }

appendChild を実行すると、配列から削除されます。クローニングはあなたの問題を解決します。

@memosdp は、元の親ノードからこれらの p 要素を実際に削除したいことを指摘しました。その場合、ループが終了したら、古い親ノードをクリアします。

// your loop is before this
var node = p[0].parentNode;
while (node.hasChildNodes()) {
    node.removeChild(node.lastChild);
}
于 2012-10-20T06:05:10.177 に答える