Javascript 如何从父div中删除div列表?
我对JavaScript有问题 我需要从父div中删除一个div列表。 所以我试了一下:Javascript 如何从父div中删除div列表?,javascript,dom,parent,children,Javascript,Dom,Parent,Children,我对JavaScript有问题 我需要从父div中删除一个div列表。 所以我试了一下: var divs = parent.getElementsByTagName("div"); if(divs != null) { for(var v = 0; v < divs.length; v++) { parent.removeChild(divs[v]); } } var divs = parent.getElementsByTagName("div
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = 0; v < divs.length; v++)
{
parent.removeChild(divs[v]);
}
}
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = 0; v < divs.length; v++)
{
parent.removeChild(divs[0]);
}
}
var divs=parent.getElementsByTagName(“div”);
如果(divs!=null)
{
对于(var v=0;v
但问题是,JS并没有删除所有的div。JS只删除列表的一半
我也试过:
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = 0; v < divs.length; v++)
{
parent.removeChild(divs[v]);
}
}
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = 0; v < divs.length; v++)
{
parent.removeChild(divs[0]);
}
}
var divs=parent.getElementsByTagName(“div”);
如果(divs!=null)
{
对于(var v=0;v
但结果是一样的
请帮忙?你为什么不试试下面的方法呢:
var divs = parent.getElementsByTagName("div");
if (divs.length > 0) { // Technically unnecessary, as the for loop just won't run if there aren't any elements returned
for (var v = divs.length; v >= 0; v--) {
divs[v].parentNode.removeChild(divs[v]);
}
}
为了解释为什么这是正确的,必须使用removeChild
删除父节点的实际子节点。如果div[v]
是一个后代(你知道,就像嵌套在另一个元素中一样——不是div——它是parent
的实际子元素)。当您有一个元素的引用时,这是删除该元素的安全方法。您可以保证元素的父节点正在删除它,因此是有效的。如果您检查控制台是否尝试使用parent.removeChild
像您和其他人的代码一样,则会为任何子代引发异常-
尽管指出for循环的更好替代方法是:
while (divs[0]) {
divs[0].parentNode.removeChild(divs[0]);
}
我没有想到这一点——这是在另一个回答/评论区决定的。你为什么不试试这样的方式呢:
var divs = parent.getElementsByTagName("div");
if (divs.length > 0) { // Technically unnecessary, as the for loop just won't run if there aren't any elements returned
for (var v = divs.length; v >= 0; v--) {
divs[v].parentNode.removeChild(divs[v]);
}
}
为了解释为什么这是正确的,必须使用removeChild
删除父节点的实际子节点。如果div[v]
是一个后代(你知道,就像嵌套在另一个元素中一样——不是div——它是parent
的实际子元素)。当您有一个元素的引用时,这是删除该元素的安全方法。您可以保证元素的父节点正在删除它,因此是有效的。如果您检查控制台是否尝试使用parent.removeChild
像您和其他人的代码一样,则会为任何子代引发异常-
尽管指出for循环的更好替代方法是:
while (divs[0]) {
divs[0].parentNode.removeChild(divs[0]);
}
我没有想到这一点——这是在另一个回答/评论区决定的。两种解决方案:
1:倒计时
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = divs.length - 1; v >= 0; v--)
{
parent.removeChild(divs[0]);
}
}
2:缓存长度:
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = 0, len = divs.length; v < len; v++)
{
parent.removeChild(divs[0]);
}
}
var divs=parent.getElementsByTagName(“div”);
如果(divs!=null)
{
对于(变量v=0,len=divs.length;v
两种解决方案:
1:倒计时
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = divs.length - 1; v >= 0; v--)
{
parent.removeChild(divs[0]);
}
}
2:缓存长度:
var divs = parent.getElementsByTagName("div");
if(divs != null)
{
for(var v = 0, len = divs.length; v < len; v++)
{
parent.removeChild(divs[0]);
}
}
var divs=parent.getElementsByTagName(“div”);
如果(divs!=null)
{
对于(变量v=0,len=divs.length;v
getElementsByTagName返回的列表是活动的。这意味着它会随着删除DOM对象而更新,因此每个周期的长度都不相同
这是一个例子
getElementsByTagName返回的列表是活动的。这意味着它会随着删除DOM对象而更新,因此每个周期的长度都不相同
这是一个。父对象是窗口对象。。向我们显示完整的代码…您确定使用
getElementsByTagName
找到的所有div都是父div的实际子级吗?而不可能是父母的后代?如果他们是后代,我不确定删除第一个后代的行为是否正常。它将删除父项的所有子项。也许您还需要删除所有嵌套的
元素?而且我认为divs
永远不会是null
。getElementsByTagName
返回的值是一个HTMLCollection
——从技术上讲是一个数组。因此,您需要检查.length>0
,而不是null
@ianpgall:Correct。null
检查没有意义<如果找不到任何元素,code>getElementsByTagName将返回一个空列表。另外,循环处理列表已为空的情况。parent
是窗口对象。。向我们显示完整的代码…您确定使用getElementsByTagName
找到的所有div都是父div的实际子级吗?而不可能是父母的后代?如果他们是后代,我不确定删除第一个后代的行为是否正常。它将删除父项的所有子项。也许您还需要删除所有嵌套的
元素?而且我认为divs
永远不会是null
。getElementsByTagName
返回的值是一个HTMLCollection
——从技术上讲是一个数组。因此,您需要检查.length>0
,而不是null
@ianpgall:Correct。null
检查没有意义<如果找不到任何元素,code>getElementsByTagName将返回一个空列表。另外,循环会处理列表已经为空的情况。+1但是活动列表上的.length
会重新计算,而且有点昂贵。我会这样做:while(divs[0])parent.removeChild(divs[0])代码>@user1689607:很公平。说得好。我会更新我的答案。哦,我明白为什么了。每个div可能有不同的父级。无法从问题中判断。如果找到的div是后代而不是孩子,则此操作无效。它将抛出一个异常。不能只在任何节点上使用parent.removeChild
——请注意,实际的子div是如何首先被删除的,但嵌套的子div会引发一个异常(在浏览器控制台中)。@MattBurland:div
可能是parent
的更深层嵌套后代parent.removeChild
仅适用于一个级别的深度。+1但活动列表上的.length
会重新计算,而且有点昂贵。我会这样做的