2012-04-09 13 views
1

jQueryを使用してDOMから引き出された属性から新しいJavascriptオブジェクトを作成しようとしています。私はプルしようとしている 情報このからデータ - *です:Javascriptで動的オブジェクトを作成する

<button type='button' class='pickup' data-name="apple" data-weight='1' data-color='red'>food</button> 

だから私はデータ名およびデータ・体重を取得し、(私がしなければならない場合、または既存の)新しいに入れたいですオブジェクト。ここで私は問題を抱えています。私は、オブジェクトが次のようになりたい:

MyObject = { 
       food: { 
         weight: 1, 
         color: 'red' 
         } 
       } 

私は「について(VAR I MyObjectにで)」ループを通って、このような新しいオブジェクトを作成しようとしてきたが、それがダウンして属性を追加することになるとMyObject {}に値を渡すと、それを動作させる方法がわかりません。

アイデアや提案はありますか?


以下の回答は完全に機能しました。ありがとうございました! どのように動的に作成する場合:このような変数から

MyObject.food = {} 

、:

var Name = "meal"; 
    MyObject.Name = {} // creates MyObject.meal = {}; 

私はそれをどのように行うのでしょうか?私はMyObject [Name] = {}が動作すると思ったが、それは私のためには見えなかった。たぶん私は間違って入力した? :S

答えて

0

$(".pickup").data("name")

コンプリートっぽい例の私の頭の上からなど、「りんご」あなたを取得します。

$(".pickup").click(function(){ 
    MyObject = { 
     food: { 
      weight: $(this).data("weight"), 
      color: $(this).data("color") 
     } 
    } 
}); 
+1

もしそうでなければ、 'document.querySelector(" pickup ")。getAttribute(" data-name ")'は同じことをします。 – JKing

+1

@ JKingのコメントは編集前に言ったことです。私は彼がjQueryを使用することが大丈夫かどうか尋ねました。しかし、その後、私は彼がすでにそれを使用していたことに気づいた。あなたのコメントをそこに残してください。私はそれについて知らなかった。 + 1'd – Chris

+1

ありがとうございました!あなたの編集で、私が言及していた文脈を取り除くと、少し狂ったように聞こえます。また、面白いことに、jQueryの「照会」部分を使っている人を何度も見たことがありません。文書で心を吹き飛ばしています。querySelector/querySelectorAll。私はjQueryから人々を説得するつもりはありませんが、できることはたくさんあります。しかし、最近バニラのJavaScriptを使うと、多くの人があなたの信じるものよりももっと多くのことを行うことができます。 – JKing

3

属性がどのようなものかわからない場合は、.attributesオブジェクトをループすることができます。 HTML5対応のブラウザで

var attrs = $('.pickup')[0].attributes; // grab the attributes of the element 

var MyObject = { // create the object 
    food: {} 
}; 

    // loop the attributes, and add the data- attributes to the object 
$.each(attrs, function(_, v) { 
    if (v.name.indexOf('data-') !== -1) 
     MyObject.food[v.name.replace('data-', '')] = v.value; 
}); 

http://jsfiddle.net/5m7KF/


、あなたはdata-属性を取得するための要素の.datasetプロパティを使用することができます。

var data = $('.pickup')[0].dataset; 

var MyObject = { 
    food: {} 
}; 

$.each(data, function(k, v) { 
    MyObject.food[k] = v; 
}); 

http://jsfiddle.net/5m7KF/1/

+1

ちょっと! Kabeの注意 - 重要な点は、MyObjectの階層が事前に作成されていることです。 MyObject = {}を持っていれば、MyObject.food [value] = someValueを任意に追加することはできません。 MyObject内の食品オブジェクトは事前にそこに存在する必要があります。 –

0

あなたはこの

var d = $(".pickup").data(); 

"D" のようにjQueryを使用することができます$の属性を持つオブジェクトです( 'ピックアップ。')で始まる 'データ - '、そしてあなたそれを使用することができます あなたを助けることを願って!

1
var FinalObject= {} 
$('.filter-products select').each(function() { 
    var property= $(this).attr('id'); 
    var value = $(this).val(); 
    FinalObject[property] = value; 
}); 

console.log(FinalObject);