.splice($ .inArray())应该只删除匹配项

时间:2015-04-25 14:27:50

标签: jquery splice

我有五个链接。每个链接都有一个id。我将这些id中的每一个保存到一个数组中。

点击链接时我试图从数组中删除匹配的点击链接ID。

我尝试使用以下内容执行此操作:

shuffledBlockIds.splice( $.inArray(removeItem, shuffledBlockIds), 1 );

首次点击该项目会删除,但如果我再次点击它会删除另一个项目(虽然点击的ID不再存在)。

如果数组中存在点击后的ID,我该如何删除项目?

看一下indexOf(),但这应该不适用于IE8。

IE9 +解决方案也会受到欢迎 - 只是想知道是否有一些聪明的Jquery方法也在处理IE8。

小提琴: http://jsfiddle.net/dyoew9ga/

1 个答案:

答案 0 :(得分:3)

如果removeItem中不存在shuffledBlockIds,则$.inArray()将返回-1

documentation for splice()说(强调我的):

  

开始

     

开始更改数组的索引。如果大于数组的长度,则实际起始索引将设置为长度   数组。 如果是否定的,将从最后开始那么多元素。

因此,splice()将最终删除数组中的最后一个元素。

要解决此问题,请使用显式测试:

var index = $.inArray(removeItem, shuffledBlockIds);
if (index >= 0) {
    shuffledBlockIds.splice(index, 1);
}