在 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/