我需要遍历一系列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'
}
答案 0 :(得分: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()
转换为数组。
您可以使用另一个$.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')
};
});
请注意,参数与第一个版本相反。容易被抓住。
顺便说一下,你并没有真正创造一个“对象文字”。你只是在创建一个对象。 “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')
};
});
这会在1
上开始编号,如问题所示。虽然我仍然倾向于使用数组。