我的视图包含一个具有以下结构的表:
<table id="mappings">
<thead>
<tr>
<th width="40%"><input type="checkbox" id="cb-master" /> Structure</th>
<th width="15%">Excel Column</th>
<th width="15%">Excel Row Start</th>
<th width="15%">Excel Row End</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" id="cb-1" value="1" /> Item 1</td>
<td><input type="text" id="col-1" value="A" /></td>
<td><input type="text" id="rstart-1" value="5" /></td>
<td><input type="text" id="rend-1" value="20" /></td>
</tr>
<tr>
<td><input type="checkbox" id="cb-2" value="2" /> Item 2</td>
<td><input type="text" id="col-2" value="B" /></td>
<td><input type="text" id="rstart-2" value="5" /></td>
<td><input type="text" id="rend-2" value="20" /></td>
</tr>
.
.
.
<tr>
<td><input type="checkbox" id="cb-n" value="n" /> Item n</td>
<td><input type="text" id="col-n" value="Z" /></td>
<td><input type="text" id="rstart-n" value="5" /></td>
<td><input type="text" id="rend-n" value="20" /></td>
</tr>
</tbody>
</table>
其中ItemId
是复选框中包含的值,并且每个输入的id
都附加了当前项的Id
。如何使用jQuery迭代上面的表并创建一个JSON数组,其中包含复选框checked
值设置为true的每一行中文本框的值?
我希望JSON对象看起来像这样(如果可能的话):
[
{ "ItemId": "1", "ExcelColumn": "A", "ExcelRowStart": "5", "ExcelRowEnd": "20" },
{ "ItemId": "2", "ExcelColumn": "B", "ExcelRowStart": "5", "ExcelRowEnd": "20" },
.
.
.
{ "ItemId": "n", "ExcelColumn": "Z", "ExcelRowStart": "5", "ExcelRowEnd": "20" }
]
答案 0 :(得分:7)
你走了:
$("#mappings tr input:checkbox:checked")
.closest("tr").find("input:text").css({ "border" : "1px solid red" });
这是一个jsFiddle:http://jsfiddle.net/xgSpp/
要将选择序列化为JSON,您只需拨打serializeArray
即可。唯一的问题是你必须提供元素的名称。
var result = $("#mappings tr input:checkbox:checked").closest("tr").find("input:text").serializeArray();
alert(JSON.stringify(result));
答案 1 :(得分:3)
如果为输入添加类,则编码可以更简单
<tr>
<td><input type="checkbox" id="cb-1" value="1" class="ItemId" /> Item 1</td>
<td><input type="text" id="col-1" value="A" class="ExcelColumn"/></td>
<td><input type="text" id="rstart-1" value="5" class="ExcelRowStart" /></td>
<td><input type="text" id="rend-1" value="20" class="ExcelRowEnd" /></td>
</tr>
var result = [];
$("tbody :checked").each(function(){
var tr = $(this).parent('td').parent('tr');
var item = {};
$("input", tr).each(function(){
item[$(this).attr("class")] = $(this).val();
});
result.push(item);
});
上查看
答案 2 :(得分:0)
好的,所以这就是我想出的:http://jsfiddle.net/manuel/rmwSY/
请注意,我认为你在<td><input type="checkbox" id="cb-2" value="1" />
上打错了。这不应该是value="2"
吗?