[英]Why does .splice always delete the last element?
在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);
不,兩者都不起作用,因為您實際上沒有找到正確的標簽索引。
為什么不? 因為$(this).text()
包含您添加的刪除標記,所以×
-例如“ Morning×”。 由於那不在您的tags
數組中,因此index
將為-1。 tags.splice(-1, 1);
將從數組末尾刪除1個項目。
通常,將演示文稿文本(即標記元素的文本)用作數據(例如,將該文本用作數組中的查找值)從來不是一個好主意。 當演示文稿中的某些內容發生更改時,很有可能會被破壞(例如此處)。 因此,建議將數據(需要查找標簽的內容)存儲為數據(例如,使用jQuery提供的data()
API),即使它看起來很多余。
這是一個簡單的示例-僅添加/替換兩行,我用“ JT”開頭的注釋標記了這些行: JSFiddle
現在,我們不是通過$(this).text()
查找,而是通過$(this).data()
存儲的數據值“ tagValue”查找-這樣,查找值仍然綁定到元素,但我們不依賴演示文稿文本。
如果tag
不在tags
數組中,則$.inArray
將返回-1
,這將導致最后一項被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.