我有一个HTML表,如下所示:
用户可以更新任何文本框并从下拉列表中选择。
一旦完成操作,数据需要通过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]进行裁判的原因。
答案 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()
调用以从集合中删除标题。