2017-01-11 10 views
0

に私はこの簡単な関数この例ではjQueryのカスタム機能が拡張:ストアデータをDOM要素

$.fn.extend({ 

    initCustomFunction: function(){ 

     var obj = { // some data } 
     $(this).data('myObj', obj); // I want to attach obj to this element 

    }, 

    startCustomFunction: function(){ 

     var obj = $(this).data('myObj'); 

     // do something 

    } 
}); 

$('#myId').initCustomFunction(); 
$('#myId').startCustomFunction(); 

を持っているi「はstartCustomFunction」内「このmyobj」オブジェクトを取得することはできません。どうすればこの問題を解決できますか?特定の要素に対してInit関数を呼び出すと、現在のDOM要素にデータを添付したいと思います。

+0

startCustomFunction' –

+0

を再現することはできません '前に...一つの要素とカンマを逃したが、複数の要素がある場合に問題が右、発生? – sinisake

+0

単一または複数の要素では機能しません。私は多くのjQueryプラグインのような振る舞いを再現したいと思います。そこでは、ある要素に対して何かを初期化し、その要素のプラグインのデータにアクセスすることができます。私は私のinit関数を呼び出すオブジェクトのプラグインデータを保存する方法を理解していません。たとえば、div要素のデータテーブルを初期化すると、$(#div-element)を使ってdatatable configにアクセスできます。 DataTable –

答えて

1

2つの関数定義の間にカンマが必要です。

$.fn.extend({ 
 

 
    initCustomFunction: function(){ 
 

 
     var obj = { foo: 'bar' }; 
 
     $(this).data('myObj', obj); // I want to attach obj to this element 
 

 
    }, 
 

 
    startCustomFunction: function(){ 
 

 
     var obj = $(this).data('myObj'); 
 
     $('#result').text(obj.foo); 
 

 
    } 
 
}); 
 

 
$('#myId').initCustomFunction(); 
 
$('#myId').startCustomFunction();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="myId"></div> 
 
<div id="result"></div>

+0

正しい。私は自分のコードを変更しましたが、まだ動作しません。 objはローカルスコープ "this"にアタッチされています.. –

+0

私のコードスニペットが機能します。私たちがあなたを助けるために、mcveを投稿してください。 http://stackoverflow.com/help/mcve – nvioli