2010-10-21 54 views
1

即時消息試圖刪除一個HTML選擇列表。這是即時通訊使用:Javascript循環限制刪除選擇列表不斷變化

var size = DID(SourceDiv + Number).options.length; 
    DeleteSelectElements(SourceDiv+Number,size); 

function DeleteSelectElements(Div,Len){ 
    var k; 
    var Length = Len 
    for (k = 0; k < Length; k++) { 
     DID(Div).options[k] = null; 
    } 
} 

DID只是返回實際的HTML元素。問題在於,只有該列表正在被刪除。 Len參數正在發生變化,因爲它涉及與列表的實際長度有關的大小。所以當我在函數中刪除它實際上改變的'Length'並且從未到達列表的實際末尾時:s

回答

0

您只能刪除第一個元素!當你刪除它時,第二個變成新的第一個...所以刪除第一個元素的Length

function DeleteSelectElements(Div,Len){ 
    var k; 
    var Length = Len 
    for (k = 0; k < Length; k++) { 
     DID(Div).options[0] = null; 
    } 
} 
1

你已經發現了問題:每次你刪除一個元素,長度減小,這意味着有效的指標的數量也減少一個。因此,而不是試圖刪除0Length,只是不斷地刪除第一個元素,直到列表爲空:

var e = DID(Div).options; 
while (e.length > 0) 
    e.remove(0); 
+0

+1!高雅的解決方 – jwueller 2010-10-21 12:43:40

1
當然

是: 如果你有10件事情的清單,你做刪除第一個5,你的迭代器(k)是5,你的長度是5((k < Length)== false),並且它停止 只是保持刪除第一個元素而不是'current'元素。 或者其循環向後:) 的優化:

var blah = DID(Div).options; 
for(k = Length; k > 0; k--) 
{ 
    blah[k - 1] = null; 
}