2011-12-23 2 views
2

Мне нужно пропустить цикл элементов DOM и создать объектный литерал с помощью jQuery, как показано ниже. Я предполагаю, что это связано с использованием .each, но я немного застрял в том, что делать дальше.jQuery Создать объект Literal Loop

'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' 
    } 

ответ

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') 
    }; 
}); 

Обратите внимание, что параметры меняются с первой версии. Легко поймать на этом.


И, кстати, вы на самом деле не создаете «объектный литерал». Вы просто создаете объект. «Объектный литерал» - это обозначение, используемое для создания объектов.


Кроме того, по вашим числовым индексам я предположил, что вам нужен массив объектов. Если основная структура не должна быть массивом, то нужно будет немного отличаться, как это ...

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, как показано в этом вопросе. Хотя я все равно склоняюсь к использованию массива.

+0

Он отлично работает, за исключением 1 штуки. Он называет мои объекты «объектом» вместо числа. Мне нужен «объект», чтобы иметь числовое число, например, 1, 2, 3, 4, 5 и т. Д. –

+0

Вот хороший визуальный пример того, что у меня есть и что я необходимо http://screencast.com/t/fbXme1UTjnL –

+0

Отклонить прото-мусор в нижней части изображения –

Смежные вопросы