jQuery 创建对象文字循环

标签 jquery object each 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'
    }

最佳答案

您可以使用.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()来转换为数组。


您可以使用另一个$.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 开始编号,如问题所示。尽管我仍然倾向于使用数组。

关于jQuery 创建对象文字循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8620786/

相关文章:

javascript - 使用 jquery-csv 获取 CSV 到数组中

Javascript Image() 对象有时错误地将高度和宽度设置为 0

php - 通过特定属性的值在数组中搜索对象的最有效方法

javascript - Jquery 两次点击之间的时间

ruby-on-rails - Ruby - 如何加速 ".each"数组的循环?

javascript - YouTube 嵌入式视频无法在 IE8 的模态窗口中播放

javascript - 单击按钮时在所有页面中显示警报

c++ - 执行成员函数时对象被删除?

jQuery $.each() 反向/向后迭代

javascript - 在元素后插入仅打开的 HTML 标签?