2011-01-10 10 views
3

私は、ページにDivの束を追加するプログラムを持っています。私は後でグローバル変数に含めることにしたいdivに余分な 'data-'属性を追加しました。私は基本的にこのような何かを設定したいJQueryのグローバル変数にキーと値のペアを追加するにはどうすればよいですか?

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    $.scoreArray.labels.label = $(this).attr("data-label"); 
    $.scoreArray.labels.x = $(this).attr("data-x"); 
} 
... 

は、私は[「ラベル」]私は.LABELを入れてみましたとして.XましエラーTypeError: Cannot set property 'label' of undefined

を取得しておきます[ "x"]しかし役に立たない。私は間違って何をしていますか?

+1

何をしようとしていますか?単語ごとに1つのエントリを持つscoreArray.labelsオブジェクトの配列を作成しますか?または、1つのラベルオブジェクトにある最後の単語だけを保存したいですか?ラベル '{}'を '[]'ではなく、それがうまくいくはずですが、達成しようとしているものではないかもしれません。 – Rup

答えて

1

編集:あなたがしたいことがわかります。配列には、収集する属性を含む単語ごとに1つのオブジェクトが含まれています。

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    newLabel = {}; 
    newLabel.label = $(this).attr("data-label"); 
    newLabel.x = $(this).attr("data-x"); 
    $.scoreArray.labels.push(newLabel); 
} 

しかし、あなたはあなたが作成した「グローバル」変数のような音を見ているエラーは、あなたがにいるスコープで発見されていない、これはあなたの実際のコードです:だからあなたのような何かをしたいですか。?

+0

私はOP *が配列を必要としていると思いますが、それらにオブジェクトをプッシュしたいと思います。 – sberry

+0

それはエラーOPのソースではないでしょう。 Javascriptは、名前付きプロパティを配列に追加するときに不平を言うことはありません。 – user113716

+0

うん、あなたはどちらも正しい。あなたのコメントを反映するために編集されました。 –

0

アクセスしようとすると、$.scoreArray.labelsundefinedと思われます。

の前にに項目を追加しようとしていることを確認してください。

名前の付いたプロパティを使用する場合は、配列の代わりにオブジェクトを使用する必要があります。

あなたがオブジェクトの配列を望んでいた場合は、この操作を行います。

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    $.scoreArray.labels[ i ] = {}; 
    $.scoreArray.labels[ i ].label = $(this).attr("data-label"); 
    $.scoreArray.labels[ i ].x = $(this).attr("data-x"); 
} 

またはこの:

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    $.scoreArray.labels[ i ] = {label: $(this).attr("data-label"), 
            x: $(this).attr("data-lx") 
           }; 
} 

または多分よりよい解決策が.map()を使用することですが。これ(および他のソリューション)は、既存の配列に追加していないと仮定しています。

$.scoreArray.labels = $(".word").map(function (i) { 
    return {label: $(this).attr("data-label"), 
       x: $(this).attr("data-lx") 
      }; 
}).get(); 
0

スコアはラベルで結ば保つ必要があり、それは同じように見えるよう、あなたがオブジェクトの配列ではなく、二つの配列を持つオブジェクトとのより良いだろうようにそれは私に見えます。

// are you sure you want to add this as a property on the jQuery object? 
var $.scoreArray = $.map($('.word') , function(elem) { 
         var self = $(elem); 
         return { score : self.attr("data-x"), 
           label : self.attr("data-label") }; 
        }); 

// $.scoreArray will be an array of objects, each with a score and label property 
関連する問題