如何从HTML无序列表中创建JQuery关联数组

时间:2011-08-12 09:03:51

标签: jquery arrays associative

目前在我的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(已创建)

我该怎么做才能创建一个新的数组对象,它不只是将输出视为文本字符串?

2 个答案:

答案 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)