jQuery创建对象文字循环

Ash*_*lue 2 each jquery object object-literal

我需要遍历一系列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'
    }
Run Code Online (Sandbox Code Playgroud)

小智 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();
Run Code Online (Sandbox Code Playgroud)

每次迭代返回的对象都会添加到集合中.

这个版本.map()实际上返回一个jQuery对象,所以你需要.get()转换为一个Array.


您可以使用另一个$.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')
    };
});
Run Code Online (Sandbox Code Playgroud)

请注意,参数与第一个版本相反.容易被抓住.


顺便说一句,你并没有真正创造一个"对象文字".你只是在创建一个对象."Object literal"是用于创建对象的符号.


另外,我假设你的数字索引你想要一个对象数组.如果主结构不应该是一个数组,那么它需要有点不同,就像这样......

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')
    };
});
Run Code Online (Sandbox Code Playgroud)

这将开始编号,1如问题所示.虽然我仍然倾向于使用数组.