1

.data()jQueryの関数を介してhtml要素のプロトタイプにアクセスしようとしています。これまでのところ、私は非常に混乱しています。

これは私のコードです:

// start prototype definition for myWidget
var myWidget = function() { 
    console.log('my widget is alive.');
    return this; 
};

myWidget.prototype.chosenSelect = [];

myWidget.prototype.init = function() {
    this.chosenSelect = $('#chooseMe');

    // test 1
    console.log(this.chosenSelect.data());

    // test 2
    console.log(this.chosenSelect.data('chosen'));

    // test3
    console.log(this.chosenSelect.data('Chosen'));

    // test4
    var chosenObject = this.chosenSelect.data();
    console.log(chosenObject.chosen);
};

上記のテスト1は、Chromedevtoolsを使用して確認できたオブジェクトを返します。オブジェクトは次のようになります。

Object
    chosen: Chosen
        changeCallbacks: Array[0]
        etc
        etc
        etc

chosenそのデータオブジェクト内のオブジェクトにアクセスしたい。ただし、テスト2から4はすべて戻りundefinedます。何が間違っているのでしょうか?

編集

プロトタイプは、別のライブラリから要素に追加されています。これは、割り当てが発生する場所の抜粋です。

Chosen.prototype.init = function(select, zidx, isIE7) {
this.select = select;
this.select.data('chosen', this);
4

1 に答える 1

1

次のようにデータオブジェクトにアクセスできます。これが実際のです。

// Set some data on the widget.
jQuery.data($('#chooseMe')[0], "Chosen", {chosen: "Hello!"});

var myWidget = function() {
    console.log('my widget is alive.');
    return this;
};

myWidget.prototype.chosenSelect = [];

myWidget.prototype.init = function() {
    this.chosenSelect = $('#chooseMe')[0];

    // test 1
    console.log(jQuery.data(this.chosenSelect));

    // test 2
    console.log(jQuery.data(this.chosenSelect, "Chosen"));

    // test3
    console.log(jQuery.data(this.chosenSelect, "Chosen").chosen);

    // test4
    var chosenObject = jQuery.data(this.chosenSelect, "Chosen");
    console.log(chosenObject.chosen);
};


myWidget.prototype.init();
于 2012-10-18T21:55:36.543 に答える