2009-12-13 41 views
2

我正試圖找到一種簡單的方法來重置DOM中的所有當前變量。我的應用程序有一個「鎖定」狀態,但目前鎖定時,如果您使用Firebug作爲例子,則最後一組信息在DOM中仍可見。輕鬆清除所有腳本設置變量(Javascript/jQuery)

我知道所有變量的所有名稱,但我不想有一個非常繁瑣的腳本,包括所有這些腳本(大約有300個),我明確地清除了它們的值。

有誰知道是否有一種方法可以清除所有集合變量的DOM?

如果這是一個愚蠢的問題提前道歉,並感謝任何迴應。我的應用程序廣泛使用jQuery,但是我所有的Javascript/jQuery搜索都是空白的。

+0

你爲什麼不想那麼做? 「鎖定」狀態是什麼意思? – 2009-12-13 13:56:17

+0

是否將變量附加到DOM元素作爲屬性? DOM本身沒有變量,回答者似乎對你需要清除的內容感到困惑。 – 2009-12-13 14:13:14

回答

0

每一個全球範圍內的變量或函數實際上是當前窗口中定義。您可以枚舉對象的成員(see this post)。如果你可以分離用戶定義的變量,那麼你有你需要的一切。也許你可以定義一個空的窗口並比較這些變量。請參閱以下

var a=5 

alert(window.a); //OR 
alert(window["a"]); 
1

假設你要附加變量來DOM元素作爲屬性(你應該小心不要創建一個循環引用,並觸發IE內存泄漏;見:crockford article)。

在關於泄漏的文章,克羅克福德先生給出了一個函數從所有的DOM元素,這是類似的清洗功能的引用,你需要什麼:

function purge(d) { 
    var a = d.attributes, i, l, n; 
    if (a) { 
     l = a.length; 
     for (i = 0; i < l; i += 1) { 
      n = a[i].name; 
      if (typeof d[n] === 'function') { 
       d[n] = null; 
      } 
     } 
    } 
    a = d.childNodes; 
    if (a) { 
     l = a.length; 
     for (i = 0; i < l; i += 1) { 
      purge(d.childNodes[i]); 
     } 
    } 
} 

在那裏他

if (typeof d[n] === 'function') { 

替換爲檢查您的自定義屬性/屬性的邏輯(如果您使用許多不同的列表,請保留列表中的列表,並確保您的任何屬性名稱與標準屬性(如src,標題等)沒有衝突)。