2009-12-13 46 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,标题等)没有冲突)。