我有一个类似的HTML结构,除了我根据用户的需要动态添加一对字段(firstname和amp; surname)。
<div class="wrapper">
<input id="firstname" type="text" value="firstname">
<input id="surname" type="text" value="surname">
<input id="firstname2" type="text" value="firstname">
<input id="surname2" type="text" value="surname">
</div>
我可以将所有值转换为1个长字符串,并用
分隔逗号var vals = $('input').map(function()
{
return this.value;
}).get().join(',');
但是,我希望合并前两个字段,并在第二个字段值之后通过分隔符连接,例如firstname surname, firstname2 surname2
并且因为我不知道哪些字段是在POST时创建的,所以我无法在我的选择器中指定它们,所以我需要看一下从包装器中抓取它们。
答案 0 :(得分:2)
您可以这样做:
var vals = $('input').map(function()
{
return this.id.substring(0,6) == 'surname'?this.value+'~':this.value;
}).get().join(',');
其中,单独的最后一个字段值将附加行分隔符。
注意:我已根据ID属性建立逻辑,但您可能希望使用哪个属性适合您的使用(如css类!)
答案 1 :(得分:1)
您应该能够分配应合并类似
的类的字段<div class="wrapper">
<input class="firstclass" id="firstname" type="text" value="firstname">
<input class="firstclass" id="surname" type="text" value="surname">
<input class="secondclass" id="firstname2" type="text" value="firstname">
<input class="secondclass" id="surname2" type="text" value="surname">
</div>
您现在应该能够使用类名而不是元素类型input
来选择要合并的字段,就像这样
var vals = $('.firstclass').map(function()
{
return this.value;
}).get().join(',');
另外,重新构建你的html,以便每一对都在其自己的div中,就像这样;
<div class="wrapper">
<div class="inputs">
<input class="firstclass" id="firstname" type="text" value="firstname">
<input class="firstclass" id="surname" type="text" value="surname">
</div>
<div class="inputs">
<input class="firstclass" id="firstname" type="text" value="firstname">
<input class="firstclass" id="surname" type="text" value="surname">
</div>
</div>
然后,首先选择所有inputs
作为这样的数组;
var inputs = $(".inputs');
并在输入上循环并加入字段,就像在第一个示例中所做的那样。
for (var i in inputs) {
var vals = $(i).find('input').map(function()
{
return this.value;
}).get().join(',');
... do something with vals...
}