1

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

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

2 回答 2

1

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

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

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

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

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

于 2013-08-18T20:39:13.070 回答
1

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

您必须确保该项目实际上在数组中

于 2013-08-18T20:36:31.683 回答