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

Javascript 为什么.splice总是删除最后一个元素?,javascript,Javascript,在javascript中,有两个数组:tags[]和tags\u java[]。我使用.splice删除两个数组中索引相同的某些项。tags[]可以正常工作,但是tags\u java不行,它似乎总是删除最后一项。 这是代码和 如果标记不在标记数组中,$.inArray将返回-1,这将导致删除最后一项 .不,两者都不起作用,因为您实际上没有找到标签的正确索引 为什么不呢?因为$(this).text()包含您添加的删除标记,×-例如“Morning”×”。由于这不在标记数组中,索引将为-1标签.

在javascript中,有两个数组:
tags[]
tags\u java[]
。我使用
.splice
删除两个数组中索引相同的某些项。
tags[]
可以正常工作,但是
tags\u java
不行,它似乎总是删除最后一项。
这是代码


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


.

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

为什么不呢?因为
$(this).text()
包含您添加的删除标记,
×
-例如“Morning”×”。由于这不在
标记
数组中,
索引
将为-1<代码>标签.拼接(-1,1)将从数组末尾删除1项

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

这里有一个简单的例子——只是添加/替换两行,我用以“JT”开头的注释标记了这两行:


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

您能提供/检查索引的值吗,tags array和tags_java array就在您对其中任何一个执行切片之前..?您的标记永远不在数组中-这是附加的
×显示为span文本的一部分,因此
$.inArray()
始终返回-1。谢谢@JimmiTh。但是我怎样才能修复它呢?如何从文本中修剪“×”?可以使用
var tag=$(this.text();tag=tag.substr(0,tag.length-1)
删除
&次,但如第二段所述,这很容易出错。为我将数据存储为数据的意思添加了一个示例。但现在查找值与内容“午后”和“上午”一起存储,因为如果我将它们存储为像“1,2…”这样的数字,我不知道如何在另一个页面中检索信息。有什么建议吗?谢谢。不太确定您的意思-JSFIDLE中的代码(已更新)的工作原理与原始代码完全相同-只是它在标记元素上使用
data()
,而不是
text()
。谢谢@JimmiTh,效果很好。我将仔细查看.data。这是一个好主意。我的意思是,在您存储这些数据值后,如本例中的“300301302”,我如何在另一个页面中以特定内容和颜色显示它们。这更清晰吗?
var tag = $(this).text();
var index = $.inArray(tag, tags);
    tags.splice(index,1);
    tags_java.splice(index,1);