【问题标题】:.splice( $.inArray()) should only remove matching item.splice( $.inArray()) 应该只删除匹配项
【发布时间】:2015-04-25 22:50:41
【问题描述】:

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

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

我试图通过以下方式做到这一点:

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

第一次单击时该项目可以正常删除,但是如果我再次单击它只会删除另一个项目(尽管单击的 id 不再存在)。

如果单击的 id 存在于数组中,我如何只删除一个项目?

查看了indexOf(),但这应该不适用于 IE8。

IE9+ 解决方案也将受到欢迎 - 只是想知道是否有一些智能 Jquery 方法也可以处理 IE8。

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

【问题讨论】:

  • 说真的,还在考虑 IE8 吗? 继续
  • 我有,但我想知道是否真的有一个使用 Jquery 的解决方案,可能很容易将 IE8 考虑在内 - 编辑了我的描述。

标签: jquery splice


【解决方案1】:

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

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

开始

开始更改数组的索引。如果大于数组的长度,实际起始索引将设置为长度 的数组。 如果为负数,将从末尾开始那么多元素。

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

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

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

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2010-10-07
    • 2017-05-20
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多