javascript - 为什么.splice总是删除最后一个元素?

标签 javascript

在 JavaScript 中,有两个数组:tags[]tags_java[]。我使用 .splice 删除两个数组中具有相同索引的某些项目。 tags[] 工作正常,但 tags_java 不行,它似乎总是删除最后一项。
这是代码the jsfiddle link

var tag = $(this).text();
var index = $.inArray(tag, tags);
    tags.splice(index,1);
    tags_java.splice(index,1); 

最佳答案

不,两者都不起作用,因为您实际上没有找到标记的正确索引。

为什么不呢?因为 $(this).text() 包含您添加的删除标记,× - 例如“早上×”。由于它不在您的 tags 数组中,因此 index 将为 -1。 tags.splice(-1, 1); 将从数组末尾删除 1 项。

一般来说,使用演示文本(即标记元素的文本)作为数据(例如,使用该文本作为数组中的查找值)从来都不是一个好主意。当演示文稿发生变化时,它很可能会被破坏 - 就像这里一样。因此,建议将数据(查找标签所需的数据)存储为数据 - 例如使用 jQuery 提供的 data() API - 即使它看起来多余。

这是一个简单的示例 - 只需添加/替换两行,我用以“JT”开头的注释标记了它们:JSFiddle

现在,我们不再通过 $(this).text() 进行查找,而是通过 $(this).data( 存储的数据值“tagValue”进行查找) - 这样,查找值仍然绑定(bind)到元素,但我们不依赖于演示文本。

关于javascript - 为什么.splice总是删除最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18303280/

相关文章:

javascript - jQuery - 减少滚动函数中的代码的技术

javascript - Masonry 不是 Ember Cli 中的函数

javascript - WebRTC 一个候选事件

javascript - 如何阻止 ColdFusion 目标在 Safari 中打开?

javascript - 意外的数据绑定(bind)行为

javascript - 使用javascript检查多个字符串是否相互包含

javascript - JQuery 函数仅自动填充第一个输入字段

JavaScript 错误 : Uncaught ReferenceError: edit is not defined

javascript - 帮助用新字符替换最后一次出现的字符

javascript - 3rd-party JavaScript 应用程序依赖管理