如何刪除的項[I]從項目一旦達到:刪除項[I]從jQuery的每個循環
$.each(items, function(i) {
// how to remove this from items
});
如何刪除的項[I]從項目一旦達到:刪除項[I]從jQuery的每個循環
$.each(items, function(i) {
// how to remove this from items
});
如果你想刪除數組中的元素,使用splice()
var myArray =['a','b','c','d'];
var indexToRemove = 1;
// first argument below is the index to remove at,
//second argument is num of elements to remove
myArray.splice(indexToRemove , 1);
myArray
現在將包含['a','c','d']
喜歡的東西
var indexToBeRemoved = 3; // just an illustration
$.each(items, function(i) {
if(i==indexToBeRemoved){
$(this).remove();
}
});
如果OP想要做的是從DOM中刪除一個元素,那麼這是正確的。如果他想從列表中刪除一個項目,那麼這不會那樣做。 – Pointy 2011-02-01 23:55:53
這將是最好不要在這種情況下使用$.each
。改爲使用$.grep
。除了一個例外,它以與$.each
幾乎相同的方式遍歷數組。如果您從回調中返回true
,則會保留該元素。否則,它將從數組中移除。
您的代碼應該是這個樣子:
items = $.grep(items, function (el, i) {
if (i === 5) { // or whatever
return false;
}
// do your normal code on el
return true; // keep the element in the array
});
還要說明一點:this
在$.grep
回調的情況下被設置爲window
,而不是數組元素。
我猜你想$.map
。您可以return null
刪除的項目,而不用擔心如何指標可能轉向:
items = $.map(items, function (item, index) {
if (index < 10) return null; // Removes the first 10 elements;
return item;
});
的解決方案是以下:
_.each(data, function (item, queue) {
if (somecondition) {
delete data[queue]
}
});
正如@lonesomday上面提到的(我簡直無法添加此在註釋)grep
是數組,但你可以裏面grep
插入您的選擇:
var items = $.grep($(".myselector", function (el, i) {
return (i===5) ? false : true;
};
這將存儲使用發現的所有元素in -Items`在第6位丟棄該項目(該列表爲0索引,這使得第5個元素成爲「5」)
雖然我通常更喜歡使用$.grep()
來過濾數組,但我有一個實例,已經在陣列上使用$.each()
來處理數據集。做一些處理之後,我能確定該項目是否需要從數組中刪除:
// WARNING - DON'T DO THIS:
$.each(someArray, function(index, item) {
// Some logic here, using 'item'
if (removeItem) {
// Spice this item from the array
someArray.splice(index, 1)
}
// More logic here
});
警告:這提出了一個新的問題!一旦項目與數組拼接起來,jQuery仍然會循環處理原始數組的長度。例如: -
var foo = [1,2,3,4,5];
$.each(foo, function(i, item) {
console.log(i + ' -- ' + item);
if (i == 3){
foo.splice(i, 1);
}
});
將輸出:
0 -- 1
1 -- 2
2 -- 3
3 -- 4
4 -- undefined
和Foo現在[1, 2, 3, 5]
。數組中的每個項目都相對於jQuery循環「移位」,並且我們完全忽略了元素「5」,並且循環中的最後一項是undefined
。解決這個問題的方法是使用反向for
循環(從arr.length - 1
到0
)。 這將確保刪除元素不會影響循環中的下一個項目。然而,由於這裏的問題是,相對於$。每次,有解決這個的一些替代方法:
1)$.grep()
前陣循環
var someArray = $.grep(someArray, function(item) {
// Some logic here, using 'item'
return removeItem == false;
});
$.each(someArray, function(index, item) {
// More logic here
});
2)按項目到另一個array
var choiceArray = [ ];
$.each(someArray, function(index, item) {
// Some logic here, using 'item'
if (removeItem) {
// break out of this iteration and continue
return true;
}
// More logic here
// Push good items into the new array
choiceArray.push(item);
});
您的目標是?如果你想從`items`中刪除每個項目,只需將`items`設置爲一個空數組。 – 2011-02-01 23:44:59
什麼是「物品」? – SLaks 2011-02-01 23:46:28
我不必再這麼做了......因爲我不得不重新運行我的javascript函數而沒有意識到實際問題,爲什麼它會在非IE瀏覽器中超時: http://code.google.com/ p/chromium/issues/detail?id = 71305 – bcm 2011-02-02 03:47:07