0

jQueryプラグインを作成.data()していますが、プラグイン内の要素に追加して、後で取得する必要があります。要素に対してメソッドを実行すると、次のようにIDで要素を参照するときに、保存されているデータを取得できません。

$('#name_of_the_element')

を使用して要素を参照すると、データにアクセスできます$(this)

私は何が間違っているのですか?

jQueryプラグインのコードとそれを使用するhtmlファイルのコードは次のとおりです。

jQueryプラグイン:

(function( $ ){

    var methods = {

        checkit : function(options) {

            return this.each(function(){

                var $this = $(this);

                $this.data('testdata','this is what i need to see');

            }); 
        }


    }

  $.fn.demoplug = function( method ) {        
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.checkit.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.antigravity' );
    }    

  };

})( jQuery );

HTMLファイル:

<div role="main" id="main">
    <ul id="miniatures">
        <li><img src="img/thumbs/thumb-01.jpg"></li>
        <li><img src="img/thumbs/thumb-02.jpg"></li>            
        <li id="mov3"><img src="img/thumbs/thumb-03.jpg"></li>
        <li><img src="img/thumbs/thumb-04.jpg"></li>            
        <li><img src="img/thumbs/thumb-05.jpg"></li>
    </ul>
</div>

<script src="js/libs/jquery-1.7.2.min.js"></script>
<script src="js/libs/jquery.demoplug.js"></script>
<script>

    $(document).ready(function(){

        $('li#mov3').demoplug('checkit');

        alert( $('li#mov3').data('checkit') );  // not working

        $('li#mov3').click(function(){

            alert( $(this).data('testdata') );  // works

        });
    });

</script>
4

2 に答える 2

1
    alert( $('li#mov3').data('checkit') );  // not working

これは、データで「checkit」キーをフェッチしているが、キーを「testdata」として設定しているためです。

    $this.data('testdata','this is what i need to see');

これに変更するとうまくいきます:

    alert( $('li#mov3').data('testdata') );
于 2012-05-28T23:05:19.370 に答える
0

ああ、エラーは間違った場所にありました! 作業中のプラグからこのコードを抽出して、間違っていると思われる場所を示しましたが、実際のエラーは、プラグイン内で .clone() メソッドを使用していて、.clone() メソッドの間違った使用法を使用していたことです。このエラーが発生しました - LI 要素の ID を 2 倍にして、id="mov3" の LI を 2 つ取得しました。.clone() を使用したときに複製されるものを確認するのに十分なドキュメントを読みませんでした。答えてくれてありがとう!

于 2012-05-28T23:07:05.110 に答える