2

以下に示すように、一連のDOM要素をループして、jQueryを使用してオブジェクトリテラルを作成する必要があります。これには.eachの使用が含まれると思いますが、次に何をすべきかについて少し行き詰まっています。

    '1': {
        'text': 'Maintain Compliance',
        'desc': 'blah',
        'size': 10,
        'color': '#afb0b3'
    },
    '2': {
        'text': 'lorem ipsum',
        'desc': 'blah.',
        'size': 4,
        'color': '#9b9ca0'
    },
    '3': {
        'text': 'lorem ipsum',
        'desc': 'blah',
        'size': 6,
        'color': '#c5c6c7'
    }
4

1 に答える 1

5

.map()オブジェクトの配列を作成するために使用します。

var objects = $('.my_elements').map(function(i,el) {
    var $el = $(el);
    return {
        text:$el.text(),
        desc:'blah',
        size:'some_size_property_of_the_element?',
        color:$el.css('color')
    };
}).get();

各反復から返されたオブジェクトがコレクションに追加されます。

このバージョンの は実際には jQuery オブジェクトを返すため、配列に変換する.map()必要があります。.get()


もう一方$.mapを使用して、配列を直接作成できます。

var objects = $.map($('.my_elements'), function(el,i) {
    var $el = $(el);
    return {
        text:$el.text(),
        desc:'blah',
        size:'some_size_property_of_the_element?',
        color:$el.css('color')
    };
});

パラメータが最初のバージョンと逆になっていることに注意してください。それに引っ掛かりやすい。


ところで、実際には「オブジェクト リテラル」を作成しているわけではありません。オブジェクトを作成しているだけです。「オブジェクトリテラル」は、オブジェクトを作成するために使用される表記法です。


また、数値インデックスから、オブジェクトの配列が必要であると想定しました。主構造が配列であってはならない場合は、次のように少し異なる必要があります...

var objects = {};

$('.my_elements').each(function(i,el) {
    var $el = $(el);
    objects[ i+1 ] = {
        text:$el.text(),
        desc:'blah',
        size:'some_size_property_of_the_element?',
        color:$el.css('color')
    };
});

これにより1、質問に示されているように番号付けが開始されます。私はまだ配列を使用する傾向がありますが。

于 2011-12-23T21:32:35.760 に答える