构造具有名称的对象:具有[name =“value”]属性的n个元素的值对

时间:2014-03-07 03:09:32

标签: javascript

构建

的简单方法是什么?
{ 
type: [ "company", "product", "service" ]
}

出自:

<input type="radio" name="type" value="company">Company
<input type="radio" name="type" value="product">Product
<input type="radio" name="type" value="service">Service

使用任何库,例如jQuery或Underscore.js,还是普通的JavaScript?

一点点解释,因为它似乎令人困惑:

动态构造对象。这意味着这些HTML元素将生成所显示的对象,但如果name属性为“profile”,并且值不同,则结果为:

{ 
profile: [ "profile1", "profile2", "profile3" ]
}

2 个答案:

答案 0 :(得分:1)

这应该可以使用

轻松完成
function getInputValues(name)
{
    return $('input[name="' + name + '"]').map(function() {
        return this.value;
    }).get();
}

var data = { 
    type: getInputValues('type')
};

使用原生JavaScript:

function getInputValues(name)
{
    return [].map.call(document.getElementsByName(name), function(item) {
        return item.value;
    });
}

但是,这假定您传递的名称始终是<input>元素;如果这是一个问题,你应该使用查询选择器。

Demo

答案 1 :(得分:0)

这是一个非jQuery解决方案

var inputs = querySelectorAll("input[name=type]");

var obj = {};

obj.type = [].map.call(inputs, function(elem) {
  return elem.value;
});