使用jquery在循环中组合两个表单值
嗨,伙计们,我有个棘手的问题要问 我有一个表单,当我循环位于表头中的所有表单字段时,我希望它们组合成一个数组 这是我用来获取字段所有数据的循环使用jquery在循环中组合两个表单值,jquery,Jquery,嗨,伙计们,我有个棘手的问题要问 我有一个表单,当我循环位于表头中的所有表单字段时,我希望它们组合成一个数组 这是我用来获取字段所有数据的循环 $('#filterTable').find("table select, table input").each(function(key, value) { var name = $(this).attr('name'); var input = {};
$('#filterTable').find("table select, table input").each(function(key, value) {
var name = $(this).attr('name');
var input = {};
if (this.value !== ''){
if (name === 'filter_select') {
input.col = $(this).data('col');
input.layer_id = $(this).data('layer');
input.filterSelect = $(this).val();
} else if (name === 'froms'){
input.col = $(this).data('col');
input.layer_id = $(this).data('layer');
input.from = $(this).val();
} else if (name === 'to'){
input.col = $(this).data('col');
input.layer_id = $(this).data('layer');
input.to = $(this).val();
}
if(layerId == "" && input)
layerId = input.layer_id;
filterForm.push(input);
previous_col = $(this).data('col');
}
});
这段代码为我提供了以下输出
0:
col: 2
layer_id: 139
from: "100"
1:
col: 2
layer_id: 139
to: "500"
我想要完成的是合并它们,因为它们具有相同的列或位于相同的表头中,所以输出将如下所示
0:
col: 2
layer_id: 139
from: "100"
to: "500"
你知道我该怎么解决这个问题吗?我被困在这里这么长时间了。谢谢您必须使用合并
http://jsfiddle.net/jj7XZ/
或者直接看到类似的
https://stackoverflow.com/questions/22208966/merging-of-two-arrays-store-unique-elements-and-sorting-in-jquery
https://stackoverflow.com/questions/38807704/trying-to-combine-all-value-from-jquery-each-function
你有两个输入,所以
$('#filterTable').find("table select, table input").each(function...
运行两次,每个输入字段运行一次,将输入推入FilterPerform两次。你需要推一下
创建一个填充输入对象的函数,然后在完成后推送它
大概是这样的:
input.col = $('#input1').data('col');
input.layer_id = $('#input1').data('layer');
input.to = $('#input1').val();
input.from = $('#input2').val();
filterForm.push(input);
只需修改代码即可实现所需:
$('#filterTable').find("table select, table input").each(function(key, value) {
var name = $(this).attr('name');
var input = {};
if (this.value !== ''){
if (name === 'filter_select') {
input.col = $(this).data('col');
input.layer_id = $(this).data('layer');
input.filterSelect = $(this).val();
} else if (name === 'froms'){
input.col = $(this).data('col');
input.layer_id = $(this).data('layer');
input.from = $(this).val();
} else if (name === 'to'){
input.col = $(this).data('col');
input.layer_id = $(this).data('layer');
input.to = $(this).val();
}
if(layerId == "" && input)
layerId = input.layer_id;
if (name === 'to')
{
var exist = filterForm.map(f => f.col).indexOf(input.col);
if(exist == -1)
{
filterForm.push(input);
}
else
{
filterForm[exist].to = $(this).val();
}
}
else
{
filterForm.push(input);
}
previous_col = $(this).data('col');
}
});
说明:
在将新对象推送到数组之前,我们要检查数组中是否有具有相同col属性的对象?如果否,则推送它,否则将数组中找到的对象的属性设置为。您可以使用
$.extend
组合多个具有任意属性的对象
示例代码(没有html输入,可以放入“迭代”部分)
var filterForm=[];
//输入循环的上一次迭代popuplate filterForm数组
推({
上校:2,
层id:139,
从:“100”
});
//这个迭代从输入中获取数据(为了简单/演示,这里硬编码)
变量输入={
上校:2,
层id:139,
致:“500”
};
//查找是否已在阵列中
var existing=FILTEXPERFORM.find(函数(e){
返回e.col==input.col&&e.layer\u id==input.layer\u id;
});
//更新现有项目或添加为新项目
if(现有!=null)
$.extend(现有,输入);
其他的
FilterPerform.push(输入);
console.log(filterForm)代码>
您必须使用合并吗?你…吗?我想你的意思是“你可以使用合并”