0

<div class="gallery">ドキュメントが可変数の要素を処理できる JavaScript ギャラリーを作成します。既存のすべてのギャラリーの情報を格納する多次元配列を定義することを考えました。

JavaScript + jQuery 1.9.1

var gallery = new Array;
gallery = ['images','imageActive','width'];

for (var i=0;i<$('.gallery').length;i++) {
    gallery[i]['images'] = $('.gallery:eq['+i+'] img').index();
    gallery[i]['imageActive'] = 0;
    gallery[i]['width'] = $('.gallery:eq['+i+'] li').css('width');
}


コンソール出力

ここに画像の説明を入力

私のアプローチは完全に間違っていますか?この場合、配列は意図されていませんか?

4

3 に答える 3

2

オブジェクトに割り当てる{}

for (var i=0;i<$('.gallery').length;i++) {
   gallery[i] = {};
   gallery[i]['images'] = $('.gallery:eq['+i+'] img').index();
于 2013-04-03T11:12:06.710 に答える
0

gallery = new Array空の配列を作成します。プロパティにアクセスする前に、まず配列にオブジェクトを入力する必要があります。

var gallery = [];
gallery = ['images','imageActive','width'];

for (var i=0;i<$('.gallery').length;i++) {
    gallery.push({}); // increase length and add empty object

    gallery[i]['images'] = $('.gallery:eq['+i+'] img').index();
    gallery[i]['imageActive'] = 0;
    gallery[i]['width'] = $('.gallery:eq['+i+'] li').css('width');
}
于 2013-04-03T11:11:40.030 に答える
0

まず、最初の代入 ( = new Array) は完全に不要です。リテラル構文で配列を作成している次の行で上書きしています。

私はあなたがこれを意味したと思います:

var gallery = [];
for (var i=0;i<$('.gallery').length;i++) {
    gallery[i] = {
        images:      $('.gallery:eq['+i+'] img').index(),
        imageActive: 0,
        width:       $('.gallery:eq['+i+'] li').css('width')
    };
}

これは空の配列を作成し、そこにエントリを配置します。各エントリはオブジェクトです (または「マップ」または「辞書」。JavaScript では、配列との混同を避けるために「連想配列」という用語は使用しません)。 . 各オブジェクトには、、、imagesおよびimageActiveプロパティがありwidthます。

ところで、それを書くためのより効率的な方法があるかもしれません:

var gallery = $(".gallery").map(function() {
    var entry = $(this);
    return {
        images:      entry.find('img').index(),
        imageActive: 0,
        width:       entry.find('li').css('width')
    };
}).get();

これはmap要素をループして配列を構築するために使用され、最初は jQuery オブジェクトとして返されます。したがってget、基になる実際の配列を取得するために使用します。

于 2013-04-03T11:15:13.860 に答える