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();

每次迭代返回的对象被添加到集合中。

这个版本.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')
    };
});

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


顺便说一句,您并没有真正创建“对象文字”。你只是在创建一个对象。“对象文字”是一种用于创建对象的符号。


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

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 回答