javascript中的RemoveChild()错误

javascript中的RemoveChild()错误,javascript,removechild,dom,Javascript,Removechild,Dom,我正在使用php文件中的函数创建一些“li”和一些“span”元素,如下所示: while($row_quotes=mysql_fetch_array($result_quotes) and $x<10){ $x++; echo "<li class='citazione'>".$row_quotes['citazione']."</li><span class='citazione_info'>".$row_quotes['personaggio'].

我正在使用php文件中的函数创建一些“li”和一些“span”元素,如下所示:

while($row_quotes=mysql_fetch_array($result_quotes) and $x<10){
$x++;
echo "<li class='citazione'>".$row_quotes['citazione']."</li><span class='citazione_info'>".$row_quotes['personaggio']." - ".$row_quotes['libro']."</span>";
}

while($row\u quotes=mysql\u fetch\u array($result\u quotes)和$x注意:
ul
的唯一有效子元素是零个或多个
li
元素:

查看这个JSFIDLE:

在其中,我创建了两个
ul
s——一个包含有效元素(
li
),另一个正如您所描述的,也包含
span
s作为子元素。如果您在控制台运行时观察控制台,您将看到
li
元素只包含在
childNodes
(奇怪的是,还有我的代码间距中的TextNodes!)。不同之处在于,有效的HTML在
li
中包含
span
,因此删除
li
将实现您的目标

另一件值得一提的事情是,
for…
循环效率低下。通过计算每次迭代的
childNodes
长度,可以使循环的成本超出需要。在实际进入循环之前计算循环的长度效率更高:

var looplen = div.childNodes.length;
for(l=0;l<looplen;l++){
    div.removeChild(div.childNodes[l]);
}
var looplen=div.childNodes.length;

对于(l=0;l您的原始代码不起作用,因为您正在从
0
循环到
childNodes.length-1
,但是您忘记了,一旦删除项0并增加计数器,项1将在下一次迭代中删除;在#0处仍然会有一个项

以下代码可用于删除元素的内容:

var div = document.getElementById('quotes_holder');
while (div.firstChild) {
    div.removeChild(div.firstChild);
}​

PS:您的HTML标记无效。

这可能引发异常,一旦删除元素,长度就会改变;并且子节点会向上移动一个位置。
var div = document.getElementById('quotes_holder');
while (div.firstChild) {
    div.removeChild(div.firstChild);
}​