2011-08-26 40 views
5

比方说,我有这样的:如何解析输入[]值,并把它们放入一个Javascript数组

<form id='foo'> 
<input name='bar[name]' /> 
<input name='bar[age]' /> 
</form> 

我怎样才能形式foo内的阵列输入的值,并把它们放到一个关联数组/ object like this:

var result = {bar:{name:'blah',age:21}}; 

PS我不想为此使用任何框架。

+3

“纯JavaScript的”我想你的意思是“如果不使用由其他人编写的JavaScript,如jQuery的或YUI队”? (而不是“没有Flash”或“没有DOM”?) – Quentin

+2

从技术上讲,jQuery ***是***“纯JavaScript”。你是否想了解如何阅读[用简单的DOM表单元素](https://developer.mozilla.org/en/DOM/HTMLFormElement)或者你想要更高效并获得填充内容? –

+0

是'querySelectorAll'还纯吗? – pimvdb

回答

2

这将让你的元素:

var result = {}; 
    var elements = document.forms.foo.getElementsByTagName("input"); 
    for(var i = 0; i < elements.length; i++) 
    { 
     /* do whatever you need to do with each input */ 
    } 
+0

是...但我们要如何获得在for循环使用名称attributes.Namely条[名],酒吧[年龄] –

+0

@DimitrisPapageorgiou的值'elments [I] .name' – scrappedcola

+0

感谢.. 。我做到了,它的工作 –

2

您可以映射元素,像这样的对象。

function putIntoAssociativeArray() { 

    var 
     form = document.getElementById("foo"), 
     inputs = form.getElementsByTagName("input"), 
     input, 
     result = {}; 

    for (var idx = 0; idx < inputs.length; ++idx) { 
     input = inputs[idx]; 
     if (input.type == "text") { 
      result[input.name] = input.value; 
     } 
    } 

    return result; 
} 
1
var inputs = document.getElementsByTagName('input'); 
var field_name, value, matches, result = {}; 
for (var i = 0; i < inputs.length; i++) { 
    field_name = inputs[i].name; 
    value = inputs[i].value; 

    matches = field_name.match(/(.*?)\[(.*)\]/); 

    if (!results[matches[0]]) { 
     results[matches[0]] = {}; 
    } 
    results[matches[0]][matches[1]] = value; 
} 
2
var form = document.getElementById('foo'); 
var inputs = form.getElementsByTagName("input"); 
var regex = /(.+?)\[(.+?)\]/; 
var result = {}; 
for(var i = 0; i < inputs.length; ++i) { 
    var res = regex.exec(inputs[i].name); 
    if(res !== null) { 
     if(typeof result[ res[1] ] == 'undefined') result[ res[1] ] = {}; 
     result[ res[1] ][ res[2] ] = inputs[i].value; 
    } 
} 
3

我需要这个做我自己,并找到这个问题,我不喜欢任何的答案后:我不喜欢正则表达式和其他人是有限的。

您可以通过多种方式获得data变量。当我实现这个时,我将使用jQuery的serializeArray方法。

function parseInputs(data) { 
    var ret = {}; 
retloop: 
    for (var input in data) { 
     var val = data[input]; 

     var parts = input.split('[');  
     var last = ret; 

     for (var i in parts) { 
      var part = parts[i]; 
      if (part.substr(-1) == ']') { 
       part = part.substr(0, part.length - 1); 
      } 

      if (i == parts.length - 1) { 
       last[part] = val; 
       continue retloop; 
      } else if (!last.hasOwnProperty(part)) { 
       last[part] = {}; 
      } 
      last = last[part]; 
     } 
    } 
    return ret; 
} 
var data = { 
    "nom": "123", 
    "items[install][item_id_4]": "4", 
    "items[install][item_id_5]": "16", 
    "items[options][takeover]": "yes" 
}; 
var out = parseInputs(data); 
console.log('\n***Moment of truth:\n'); 
console.log(out); 
相关问题