2015-12-15 262 views
1

我有元素列表,并且在某些事件中,我想从dom中销毁它们。

if (appendedElements.length > 0) { 
    $.each(appendedElements, function (i) { 
     $(i).remove(); 
    }) 
} 

appendedElements当然大于零,但我不删除元素。这段代码有什么问题?

+0

共享整个代码 – ozil

回答

4

问题是参数方法的第一个参数是元素的索引,而不是元素本身。这一个是作为第二个参数传递的。尝试:

if (appendedElements.length > 0) { 
    $.each(appendedElements, function (i, element) { 
     $(element).remove(); 
     //i = 0, 1, 2.... 
    }) 
} 

举例整体参考,你可以在这里找到:

http://api.jquery.com/jquery.each/

1
if (appendedElements.length > 0) { 
    $.each(appendedElements, function (i) { 
     $(this).remove(); // use this 
    }) 
} 
+0

好吧,这应该也是一样,不完全是jquery的建议,如果你想将该方法与其他对象绑定,也会出现问题:) – mikus

2

如果appendedElements是一个jQuery对象或者是DOM元素引用数组那么就没有需要迭代,您可以调用remove方法,如

$(appendedElements).remove(); 

正如已经提出的问题是each回调的第一个参数是项目的索引,而不是项目本身。

0

您应该使用each回调函数的第二个参数:

if (appendedElements.length > 0) { 
    $.each(appendedElements, function (index, element) { 
     $(element).remove(); 
    }) 
} 
0

你可以尝试没有.each例如,如果你有列表...类似的东西

<ul id="columar"> 
    <li>ok</li> 
    <li>ok</li> 
    <li>ok</li> 
    <li>ok</li> 
</ul> 

,如果你想删除李列表,您可以使用此代码:

if (2 == 2) { 
    $('#columar li').remove() 
} 

JSFiddle