我正在使用数据表。我有一个带有多个输入的表,我想通过ajax将对象数组发布到控制器。
var data = table.$('input, select').serialize();
结果:
row-1-location=123&row-1-lot=231545&row-2-location=2323&row-2-lot=5523&row-3-location=23232&row-3-lot=23235
我假设我需要在每秒的'&'处分割字符串,然后再次分割。 问题是,这是将其转换为对象数组的唯一方法吗?
我想要的结果是对象数组:
[{location : 123, lot: 231545}, {location: 2323, lot: 5523}......]
HTML:
<tbody>
<tr role="row" class="odd">
<td><input type="text" id="row-5-location" name="row-5-location" value=""></td>
<td><input type="text" id="row-5-lot" name="row-5-lot" value=""></td>
</tr>
<tr role="row" class="even">
<td><input type="text" id="row-6-location" name="row-5-location" value=""></td>
<td><input type="text" id="row-6-lot" name="row-5-lot" value=""></td>
</tr>
</tbody>
谢谢!
答案 0 :(得分:1)
要创建您需要的对象数组,直接从DOM构建结构而不是序列化它,然后将结果字符串分开就更有意义了。
要实现此目的,您可以选择父tr
元素,然后使用map()
来构建对象。唯一使HTML变得更简单的更改就是将公共类放在input
元素上。像这样:
var arr = $('table tr').map(function() {
var $tr = $(this);
return {
location: $tr.find('.location').val(),
lot: $tr.find('.lot').val()
}
}).get();
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr role="row" class="odd">
<td><input type="text" class="location" id="row-5-location" name="row-5-location" value="123"></td>
<td><input type="text" class="lot" id="row-5-lot" name="row-5-lot" value="231545"></td>
</tr>
<tr role="row" class="even">
<td><input type="text" class="location" id="row-6-location" name="row-5-location" value="2323"></td>
<td><input type="text" class="lot" id="row-6-lot" name="row-5-lot" value="5523"></td>
</tr>
</tbody>
</table>