jQuery从输入中获取值并创建一个数组

我在页面上有很多输入。 我想使用jQuery为每个输入的名称和值创建一个关联数组。 我试过了:

  inputValues = $('.activeInput').val(); 

编辑 – 感谢富有洞察力的评论,似乎创建一个对象是一个更好的方法。 有关如何创建对象的任何建议吗?

您可以使用.each()迭代元素并将名称和值添加到地图(普通对象),如下所示:

 var map = {}; $(".activeInput").each(function() { map[$(this).attr("name")] = $(this).val(); }); alert(map.key1); // "red" 

看到它在行动

我知道这个问题已经有四年了,接受的答案就足够了。 不过,为了完成,我想提供一个答案,因为这个问题是Google上的第一个搜索结果。

jQuery有1.2版本的地图function(2007年发布)。 人们可以做一些简单的事情(这不是一个跨浏览器的解决方案):

 var $inputValues = $('.activeInput').map((i, el) => el.val()); 

虽然没有人应该在JavaScript中使用箭头function,但IE或Safari不支持它们。 以下跨浏览器的解决方案:

 var $inputValues = $('.activeInput').map(function() { return $(this).val(); }); 

请务必注意,返回值不是本机数组。 当尝试使用Array.prototype中存在的方法时,这可能会导致问题。 要将结果转换为数组,可以执行以下操作:

 var inputValues = $('.activeInput').map(function() { return $(this).val(); }).toArray(); 

通过循环运行它们,您可以创建一个具有字符串可访问值的对象。 Javascript没有关联数组的概念,但是使用括号语法可以访问对象的属性,就像关联数组在PHP中工作一样。

 var values = {}; $('.activeInput').each(function() { values[this.name] = this.value; }); console.log(values['key1'], values['key3']); // Note, this is the same as above. console.log(values.key1, values.key3); 

在您的控制台中,您应该看到:红色法国

这是一个JsFiddle http://jsfiddle.net/rEtVt/

这也称为用于快速查找的hashmap(概念)。

 var inputValues = new Array(); $('input').each(function(){ inputValues[$(this).attr('name')] = $(this).val(); }); 

当然,这是假设您想要所有输入的值。


话虽如此,许多不使用和arrays的理由引起了我的注意。

如果你需要为ajax提交序列化表单,那么你应该看看serialize和serializeArray jQuery方法。 当您有许多具有相同name属性且必须在服务器上生成arrays的输入时,可能会发生特殊情况。

否则,我会在表单元素上调用jquery serializeArray并迭代其结果以将其转换为对象。

UPD:添加示例http://jsfiddle.net/zQNUW/

试试这个:

 var values = new Object() // creates a new instance of an object $('.activeInput').each(function() { values[$(this).attr('name')] = $(this).val() }) 

要检查对象属性:

 output = "" for (property in values) { output += property + ': ' + values[property]+'; '; } alert(output)