4

DOM 内の現在のすべての変数をリセットする簡単な方法を見つけようとしています。私のアプリには「ロックされた」状態がありますが、現在、ロックされている場合、たとえば Firebug を使用していると、最後の情報セットがまだ DOM に表示されます。

私はすべての変数のすべての名前を知っていますが、明示的にそれらの値をクリアするすべての変数 (約 300 あります) を含む非常に面倒なスクリプトを作成したくありません。

すべてのセット変数の DOM を「パージ」する方法があるかどうかは誰にもわかりませんか?

これがばかげた質問である場合は事前に謝罪し、回答に感謝します。私のアプリは jQuery を広範囲に使用していますが、私の Javascript/jQuery 検索はすべて空白になっています。

4

3 に答える 3

1

変数をプロパティとして DOM 要素にアタッチしていると仮定します (循環参照を作成して IE メモリ リークを引き起こさないように注意する必要があります。クロックフォードの記事を参照してください)。

リークに関する記事で、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 などの標準属性と競合しないようにしてください)。

于 2009-12-13T14:21:13.207 に答える
0

DOM をグローバル変数で乱雑にする代わりに、(関数を使用して) それらの周りにスコープを配置してみてください。

ここでよりよく説明されています:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/

于 2009-12-13T13:55:36.683 に答える
0

すべてのグローバル スコープ変数または関数は、現在のウィンドウ内で実際に定義されます。オブジェクトのメンバーを列挙できます (この投稿を参照してください)。ユーザー定義変数を分離できれば、必要なものはすべて揃っています。空のウィンドウを定義して、それらの変数を比較できるかもしれません。以下を参照してください

var a=5

alert(window.a); //OR
alert(window["a"]);
于 2009-12-13T14:04:26.260 に答える