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

时间:2013-08-18 20:21:45

标签: 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); 

2 个答案:

答案 0 :(得分:1)

不,两者都不起作用,因为你实际上找不到标签的正确索引。

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

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

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

现在,我们不是按$(this).text()向上查找,而是查找与$(this).data()一起存储的数据值“tagValue” - 这样,查找值仍然绑定到元素,但是我们不依赖于演示文稿。

答案 1 :(得分:0)

如果tag不在tags数组中,$.inArray将返回-1,这会导致删除最后一项。

You have to make sure that the item is actually in the array