我正在尝试找到一种简单的方法来重置DOM中的所有当前变量。我的应用程序处于“锁定”状态,但是目前,当锁定时,如果您使用Firebug,那么最后一组信息仍然可以在DOM中看到。
我知道所有变量的所有名称,但我不想有一个非常繁琐的脚本,包括所有这些(大约300个)我明确清除它们的值。
有人知道是否有办法'清除'所有固定变量的DOM?
如果这是一个愚蠢的问题,请提前道歉,并感谢任何回复。我的应用程序广泛使用jQuery,但我的所有Javascript / jQuery搜索都显示为空白。
答案 0 :(得分:1)
假设您将变量作为属性附加到DOM元素(您应该注意不要创建循环引用并触发IE内存泄漏;请参阅:crockford article)。
在关于泄漏的文章中,Crockford先生提供了一个从所有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,title等标准属性冲突。)
答案 1 :(得分:0)
不要使用全局变量来混淆DOM,而是尝试在它们周围放置一个范围(使用函数)。
此处更好地解释:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/
答案 2 :(得分:0)
每个全局范围变量或函数实际上都是在当前窗口中定义的。您可以枚举对象的成员(see this post)。如果您可以分离用户定义的变量,那么您拥有所需的一切。可能是您可以定义一个空窗口并比较这些变量。请参阅以下
var a=5
alert(window.a); //OR
alert(window["a"]);