我在使用Javascript分页时遇到了麻烦。我想将17个p标签移动到一个div标签中。 所以我有34个像这样的标签:
<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
同时,我希望div标签中的p标签如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
那么问题是什么?我该如何解决? 非常感谢你!
答案 0 :(得分:3)
在div上创建appendChild
时,会删除p
数组的元素。这将使这种“唯一可能性”的行为发生。假设你有4个p元素。
1, 2, 3, 4
如果您从appendChild
发出p[0]
,它会按预期移动您的p元素,但现在您的列表是这样的:
2, 3, 4
你现在指的是p[1]
,你期望那是元素2,但它将是元素3。
要修复此问题,您始终可以指向p[0]
,它会按预期运行。
答案 1 :(得分: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);
}