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)