簡體   English   中英

為什么.splice總是刪除最后一個元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM