2012-05-16 81 views
0

由於索引不斷變化,從樣式表對象中刪除規則時遇到問題。從索引更改的對象中刪除元素

我有這樣的功能:

function delete_styles(delete_array){ 

    console.log(delete_array); // ["0,0", "0,1", "0,2", "0,6", "0,7", "0,8", "0,9", "0,10", "0,14", "0,15", "0,16"] 

    for(var i in delete_array){ 

     var pair = delete_array[i].split(','); 
     var p1 = parseInt(pair[0]); 
     var p2 = parseInt(pair[1]); 

     document.styleSheets[p1].deleteRule(p2); 

    } 
} 

然而,當我刪除(0,0),指數(0,1)是無效的,因爲它變得(0,0)

我不能只使用一個計數器,並且每次都採取遞增的方式,因爲CSS規則中可能存在較大的空白。

對這裏邏輯的任何幫助?

+1

既然你不應該使用'的......反正in'來遍歷數組,可以使用普通的'for'環和迭代反向陣列上方訂購。 –

+0

@FelixKling你應該把它放在一個答案.. :) – Alnitak

回答

3

考慮從結尾開始,而不是開始,然後繼續前進。那樣,你剛剛刪除的地方就沒有風格。

此外,使用陣列時,請勿使用for in。改爲使用通常的for循環(或while)。

var i = delete_array.length; 
while(i--){ 
    var pair = delete_array[i].split(','); 
    var p1 = parseInt(pair[0]); 
    var p2 = parseInt(pair[1]); 

    document.styleSheets[p1].deleteRule(p2); 
} 
+2

美麗真的很簡單! – Abs

0

使用while循環:

var pair; 
while (pair = delete_array.shift()) { 
    pair = pair.split(','); 
    var p1 = parseInt(pair[0]); 
    var p2 = parseInt(pair[1]); 
    document.styleSheets[p1].deleteRule(p2);  
} 
+2

問題不僅在於循環,而是'document.styleSheets [p1] .deleteRule(p2)'移除元素,使得數組中的其餘索引變得無效。 –

+0

我的壞 - 試圖修復錯誤的集合:) – jmar777