4

現在のコード

jQuery要素のコレクションに対して何かを行う関数を作成しました。

var collection = $([]); //empty collection

私はそれらを追加します:

collection = collection.add(e);

と削除します:

collection = collection.not(e);

これは非常に簡単な解決策であり、うまく機能します。

問題

ここで、さまざまな設定で構成されるオブジェクトを任意のjQuery要素に設定したいと思います。

function addObject(e){
  var o = {
    alpha: .6 //float
    base: {r: 255, g: 255, b: 255} //color object
  }

  e.data('settings', o);
}

しかし、jQueryオブジェクト/要素を関数に(つまり、としてe)渡すと、呼び出しは機能e.dataしませんが、最も単純で本当に素晴らしい解決策になります。

質問

jQuery要素の「コレクション」がある場合、セットの各要素のデータを保存する最も簡単な方法は何ですか?

4

4 に答える 4

2

それらの「要素」が実際のDOM要素(ノード)である場合、単に使用することはできません$(e).data(...)か?

于 2010-03-31T12:35:47.943 に答える
2

ああ、それはすでに解決しました:)

最後のバージョン:

これはやや単純化されたコードです。

function setData(e,key,data){
  if(typeof(e)==string){ e = $(e); }

   $(e).data(key,data);
}

解決

$('element')問題は、 、'element'、またはを介し​​て要素を追加するオプションを保持したかったため、データを設定する前にチェック$(this)を追加する必要があったことです-jQueryが機能するのと同じ方法です。typeof

要素をセレクターのみとして追加している場合は、 jQuery オブジェクト$(e)を追加している場合は次のようになります。e

function setData(e,key,data){
  if(typeof(e)==string){
    $(e).data(key,data);
  }else{
    e.data(key,data);
  }
}

だから、あなたは皆賛成票を投じます、そして私は2日後に勝者として自分自身を選びます.

編集:注:これはおそらく最終バージョンではありません-私はより多くのドキュメントを読んだので、このsetData関数はサポートするすべてのタイプをjQuery.addサポートします.

于 2010-03-31T12:44:25.133 に答える
1

この方法でコレクションを処理し、アイテムを追加すると、問題が発生すると思います... jqueryでラップされていない場合は、そうではありません。したがって、再度アクセスすると、その単純な生の要素になります。

私がこの考え方で正しければ、それeは実際にはdom要素/ノード(またはその文字列表現)であり、単純なものでそのメソッド$(e)にアクセスできるはずです。data

function addObject(e){
  var o = {
    alpha: .6 //float
    base: {r: 255, g: 255, b: 255} //color object
  }

  $(e).data('settings', o);
}
于 2010-03-31T12:36:11.527 に答える
1

2つのプロパティ間のコンマを見逃したためですか?

  var o = {
    alpha: .6 <-- here 
    base: {r: 255, g: 255, b: 255} 
  }

(私はそれを疑うが、それを指摘する必要性を感じた)

これは機能し、ややすっきりしています(少なくともIMO):

    $.fn.addObject = function(){
        var o = {
            alpha: .6, //float
            base: {r: 255, g: 255, b: 255} //color object
        }
         $(this).data('settings', o);
    };

    // simple test
    $("div").addObject();
    alert($("div").data("settings").alpha); // alerts 0.6
于 2010-03-31T12:36:46.197 に答える