#jquery #data-structures
#jquery #структуры данных
Вопрос:
Псевдокод, вероятно, лучший способ показать, что я хочу сделать в jQuery:
$(selector).each(function() {
// pull data from LI tags or whatever, store in variables (imgURL, tagline, summary)
$someDataStructure.add({imgURL, tagline, summary});
});
Тогда позже… ссылка на структуру
$someDataStructure.each(function() {
var x = $someDataStructure['imgURL'];
// etc.
});
Есть предложения о том, как я мог бы это сделать?
Ответ №1:
jQuery — это просто JavaScript, а в JavaScript есть объекты. Вы можете использовать объекты JS аналогично карте C или словарю C #. Например, вы можете создать массив объектов и иметь индексы, которым вы можете присвоить имена:
var liTags = [];
$(selector).each(function() {
// pull data from LI tags or whatever
//store in variables (imgURL, tagline, summary)
liTags.push({'imgURL': imgURL, 'tagline': tagline, 'summary': summary});
});
Тогда позже:
for(int i = 0; i < liTags.length; i) {
var imgURL = liTags[i]['imgURL']; //or liTags[i].imgURL;
}
Комментарии:
1. @Chad Технически, это просто ассоциативные массивы JavaScript, а не JSON, верно? 🙂
2. Технически говоря, JSON (объектная нотация JavaScript) — это автономный формат, который получен из (и почти идентичен) собственного синтаксиса объявления объектов Javascript.
3. О, и на самом деле это называется объектом. «Ассоциативный массив» — это разговорный термин, основанный на сравнении с некоторыми другими языками.
4. ну, на самом деле это был бы json
"imgURL": "somestring"
; вы ДОЛЖНЫ использовать двойные кавычки, и вы НЕ МОЖЕТЕ поместить переменную в JSON — она статична5. Редактировать: Изменен исходный пост, чтобы, надеюсь, быть более семантически корректным
Ответ №2:
На самом деле вы можете присоединить данные к элементу jquery, используя data api
Итак, сделайте что-нибудь в строках:
$(selector).each(function() {
/* I suppose here you have three available variables named:
imgURL, tagline, summary
that you got from the element itself or from somewhere else
*/
$(this).data({imgURL: imgURL, tagline: tagline, summary:summary })
/* you could also write it {'imgURL': imgURL, etc. } if it looks clearer: the first is the hashtable key, the second a variable containing the value */
}
а затем просто извлеките ее из каждого элемента jquery!
$(selector).data()
или
$(selector).data('imgURL')
Это для прикрепления «хэш-таблицы» к элементу.
В javascript у вас есть «ассоциативные массивы» (хэш-таблицы).
Вы можете записать их как: myarray = {key:'value'}
и вы можете получить к ним доступ как:
myarray['attribute']
или myarray.attribute
как вы предпочитаете
PS. пожалуйста, обратите внимание, что я не тестировал приведенный там код, возможно, потребуются некоторые незначительные изменения
Комментарии:
1. $.data () — это круто, но я не вижу никакого способа «вставить» в нее объекты. Я перебираю кучу DIVS и извлекаю данные, мне нужен какой-то способ продолжать добавлять элементы в список / массив.
2. @CaptSaltyJack:
{imgURL, tagline, summary}
я полагаю, это псевдокод? пожалуйста, проверьте мою правку и дайте мне знать, если это то, что вы имеете в виду…3. О, я понимаю, вы прикрепляете данные к каждому элементу в цикле, так что в некотором смысле это своего рода перенос в стек. Понял. Хм .. к сожалению, это все еще не совсем подходит для того, что мне нужно, потому что я вполне мог бы уничтожить селекторы, как только я собрал из них данные. Я не уверен, что $.data () — это то, что мне действительно нужно в этом случае.