jQuery.data()はどこに保存されますか?

javascript jquery jquery-data
jQuery.data()はどこに保存されますか?

jQueryはDOMオブジェクトに設定する `data()`の値をどこに保存しますか?

「jQuery.dataDb」などの変数、またはプライベートな変数がありますか?

このオブジェクトにアクセスする方法はありますか?

  28  5


ベストアンサー

内部的に、jQueryは、 `$ .cache`という空のオブジェクトを作成します。これは、データメソッドを介して設定した値を格納するために使用されます。 データを追加する各DOM要素には、 `$ .cache`オブジェクトのキーとして使用される一意のIDが割り当てられます。

31


jQueryは、3つの異なるタイプのオブジェクトに対して3つの異なる方法でデータを取得または設定します。

DOM要素の場合、jQueryは最初に一意のIDを取得し、_expando_という要素のカスタムプロパティを作成します。

var counter = 0;
function uid() {
    // only example
    return 'jQuery' + counter;
}
function getExpando(element) {
    var expando = element['jQueryExpando'];
    // for those without expando, create one
    if (!expando) {
        expando = element['jQueryExpando'] = uid();
    }
    return expando;
}

一方、jQueryには各要素のデータマップを格納する$ .cacheオブジェクトがあり、jQueryはexpandoによって$ .cacheを検索し、特定の要素のデータマップを取得し、そのマップのデータを取得または設定します。

function data(element, name, value) {
    var expando = getExpando(element);
    var map = $.cache[expando];

    // get data
    if (value === undefined) {
        return map && map[name];
    }
    // set data
    else {
        // for those without any data, create a pure map
        if (!map) {
            map = $.cache[expando] = {};
        }
        map[name] = value;
        return value;
    }
}

カスタムオブジェクト(DOM要素またはウィンドウオブジェクトではない)の場合、jQueryは名前によってそのオブジェクトからプロパティを直接設定または取得します。

function data(obj, name, value) {
    if (!obj) {
        return obj;
    }
    // get data
    if (value === undefined) {
        return obj[name];
    }
    // set data
    else {
        obj[name] = value;
        return value;
    }
}

最後に、特別なウィンドウオブジェクトの場合、jQueryにはクロージャーに特別な_windowData_変数があり、ウィンドウのデータを保存します。

function data(obj, name, value) {
    if ($.isWindow(obj)) {
        obj = windowData;
    }
    // same as data for custom object
}

8


わかりました。

「jQuery.expando」には、「jQuery + new Date()」である各要素に追加される文字列が含まれます

`HTMLElement [jQuery.expando]`には、その要素の `data`のキーが含まれます

`jQuery.cache [HTMLElement [$。expando]]`には要素の `data`が含まれます

8


タイトルとURLをコピーしました