2013-03-04 60 views
0

我一個HTML頁面,是由很喜歡這樣的:我想用JavaScript或jQuery的實現作出這樣的陣列從HTML「陣列」,以JavaScript數組

<table id="all"> 
<tr><td><input type="text" name="search[id]" id="search[id]"></input></td></tr> 
<tr><td><input type="text" name="search[name]" id="search[name]"></input></td></tr> 
..........ecc ecc.......... 
</table> 

{ 
id:"<value in search[id]>", 
name:"<value in search[name]>", 
....ecc ecc... 
} 

數組的鍵不是靜態的,所以我不能在代碼中靜態地命名它們。 我試着用$( 「#搜索」),但我沒有被幸運:( 非常感謝您的幫助! 和遺憾的noob問題!

+0

你所要求的並不是一個「數組」,它是線性的和數字索引的。它是一個JavaScript對象,與PHP中的關聯數組相當。 – Blazemonger 2013-03-04 17:08:24

+0

{name:value,...}是定義Object而不是Array的對象字面值。一個JavaScript數組可以用它的數組字面量來定義[value0,value1,value2,...] – 2013-03-04 17:08:36

+1

html是如何生成的?如果你手工編寫它,你會想重寫每個輸入的id以便更清楚。而且這些東西都不是數組。 HTML是一張表,JS是一個對象。 – 2013-03-04 17:10:39

回答

1
var obj = {}; 
$('#all [id^=search]').each(function() { 
    obj[this.id.match(/\[(.*)\]/)[1]] = this.value; 
}); 

DEMONSTRATION

+1

我想你必須在選擇器內部跳過''''。 – Blazemonger 2013-03-04 17:10:53

0

這是做的,能夠在本地JavaScript;假設你的HTML

function nameToObj(queryName, nodes, context) { // `nodes`, `context` optional 
    var o = {}, i, j = queryName.length; // var what we'll need 
    context || (context = document); 
     // if `context` falsy, use `document` 
    nodes || (nodes = context.getElementsByTagName('input')); 
     // if `nodes` falsy, get all <input>s from `context` 
    i = nodes.length; // initial `i` 
    while (i--) { // loop over each node 
     if (nodes[i].name.slice(0,j) === queryName) { // test 
      o[nodes[i].name.slice(j+1,-1)] = nodes[i].value; 
       // match, append to object 
     } 
    } 
    return o; // return object 
} 
nameToObj('search'); // Object {name: "", id: ""}