用于html表的JQuery map() - 需要帮助

时间:2011-01-06 11:04:31

标签: jquery json map

我有一个HTML表,如下所示: alt text

用户可以更新任何文本框并从下拉列表中选择。
一旦完成操作,数据需要通过ajax发送到服务器。
发送所有值(不仅是那些已更改的值)是可以接受的。

需要帮助为ajax事务构建JSON字符串 (请注意,描述列可以是字符串,文本框或下拉列表,另外下拉列表不包含相同的选项。)

我想要映射的结构如下所示:

[
  {  id: "1" , desc: "Lenovo" , remark: "International" },
  {  id: "2" , desc: "Hard Disks", remark: ""           },
  {  id: "3" , desc: "T400", remark: "Old Model"        },
  {  id: "4" , desc: "Poker", remark: ""                }
]

非常感谢,如果地图无法做到,我愿意接受其他选择。

快乐,享受生活; - )

邮寄接受说明:
功能和说明之间有一个隐藏的列。这就是为什么答案中的指数是对细胞[2]和细胞[5]进行裁判的原因。

1 个答案:

答案 0 :(得分:0)

这应该为你做。

选择行,除第一行外,取.slice()除之外的所有行,然后调用.map()创建数组。 .get()实际上将数组从jQuery对象中拉出来。

.map()内部,我使用了DOM API属性和方法,因为在这种情况下它似乎更简单(更快)。

var ProductFeatures = $('#FeatureListTable tr').slice(1).map(function() {
    return {
        id: this.id,
        desc:this.cells[ 2 ].innerHTML,
        remark:this.cells[ 5 ].getElementsByTagName('input')[0].value
    }
}).get();

如果您知道第6个单元格(备注)中不会有任何空格,您可以更改此行:

remark:this.cells[ 5 ].getElementsByTagName('input')[0].value

......对此:

remark:this.cells[ 5 ].firstChild.value

编辑:作为旁注,如果您能够更改HTML,我会将<thead>元素中的第一行包裹起来,然后将{{1}元素中的其余行包裹起来。 1}}元素,用于分隔表格的不同部分。

然后你可以改变这个:

<tbody>

......对此:

$('#FeatureListTable tr').slice(1)

...让您能够选择除标题行之外的所有内容而无需单独.slice()调用以从集合中删除标题。