目前在我的JQuery脚本中,我有一个硬编码数组:
var arrayList = [
{"id":"1","category":"foo1","title":"bar1","image":"images/foobar1.gif"},
{"id":"2","category":"foo2","title":"bar2","image":"images/foobar2.gif"},
etc....
];
我不需要在我的脚本中对该数组进行硬编码,而是需要从系统生成的一组HTML无序列表中动态创建,以便标记为:
<ul>
<li>1</li>
<li>foo1</li>
<li>bar1</li>
<li>images/foobar1.gif</li>
</ul>
<ul>
<li>2</li>
<li>foo2</li>
<li>bar2</li>
<li>images/foobar2.gif</li>
</ul>
等...
我需要:
var arrayList = new Array(已创建)
我该怎么做才能创建一个新的数组对象,它不只是将输出视为文本字符串?
答案 0 :(得分:5)
首先,为了更加灵活,我建议您修改标记以将列表项密钥存储在data
属性中:
<ul>
<li data-key="id">1</li>
<li data-key="category">foo1</li>
<li data-key="title">bar1</li>
<li data-key="image">images/foobar1.gif</li>
</ul>
<ul>
<li data-key="id">2</li>
<li data-key="category">foo2</li>
<li data-key="title">bar2</li>
<li data-key="image">images/foobar2.gif</li>
</ul>
从那里,您可以使用map()来构建对象:
var arrayList = $("ul").map(function() {
var obj = {};
$("li", this).each(function() {
var $this = $(this);
obj[$this.data("key")] = $this.text();
});
return obj;
}).get();
您可以在this fiddle中看到结果。
答案 1 :(得分:2)
试试这个。
var items = [];
$("ul").each(function(){
var item = {};
var lis = $(this).find("li");
item.id = lis.get(0).innerHTML;
item.category = lis.get(1).innerHTML;
item.title = lis.get(2).innerHTML;
item.image = lis.get(3).innerHTML;
items.push(item);
});
var DTO = JSON.stringify(items);
items
将保存关联对象的数组,DTO
将保存该数组的JSON字符串。
选择你需要的任何东西。
演示:http://jsfiddle.net/naveen/yA54G/
P.S:请为没有JSON支持的浏览器添加对json2.js的引用(如果使用JSON.stringify)