2015-12-01 128 views
9

我有形式的值作爲遵循轉換DOM元素到對象

<input name="Document[0][category]" value="12" type="text"> 
<input name="Document[0][filename]" value="abca.png" type="text" > 

我想通過JS或jquery的將其序列的一個對象。

Document[0]={ 
    category : 12 
    filename : 'abca.png' 
}; 

我嘗試使用serializeArray和解析到的對象,但沒有很好的

+0

''abca.png''從哪裏來??? – Amadan

+0

我剛剛編輯問題。值從輸入 – bluesky

回答

5

低技術方法:

var Document = []; 
 
var inputs = document.querySelectorAll('input'); 
 
Array.prototype.forEach.call(inputs, function(input) { 
 
    var name = input.getAttribute('name'); 
 
    var prevProp = null; 
 
    var obj = Document; 
 
    name.replace(/\[(.*?)\]/g, function(m, prop) { 
 
    if (prevProp) obj = obj[prevProp] || (obj[prevProp] = {}); 
 
    prevProp = prop; 
 
    }); 
 
    obj[prevProp] = input.value; 
 
}); 
 
console.log(Document);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
<input name="Document[0][category]" value="12" > 
 
<input name="Document[0][filename]" value="abca.png" > 
 
</form> 
 

 
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 --> 
 
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

編輯:作爲guest271314音符,用Document作爲變量名可能不是最偉大的想法。

+1

它的工作。謝謝 – bluesky

+1

@Amadan預計'js'會覆蓋原生'Document'函數的結果嗎? – guest271314

2

檢查了這一點

$.fn.serializeObject = function() 
 
{ 
 
    var o = {}; 
 
    var a = this.serializeArray(); 
 
    $.each(a, function() { 
 
     if (o[this.name] !== undefined) { 
 
      if (!o[this.name].push) { 
 
       o[this.name] = [o[this.name]]; 
 
      } 
 
      o[this.name].push(this.value || ''); 
 
     } else { 
 
      o[this.name] = this.value || ''; 
 
     } 
 
    }); 
 
    return o; 
 
}; 
 

 
$(function() { 
 
    $('form').submit(function() { 
 
     $('#result').text(JSON.stringify($('form').serializeObject())); 
 
     return false; 
 
    }); 
 
});
form { 
 
    line-height: 2em; 
 
} 
 
p { 
 
    margin: 5px 0; 
 
} 
 
h2 { 
 
    margin: 10px 0; 
 
    font-size: 1.2em; 
 
    font-weight: bold 
 
} 
 
#result { 
 
    margin: 10px; 
 
    background: #eee; 
 
    padding: 10px; 
 
    height: 40px; 
 
    overflow: auto; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<h2>Form</h2> 
 
<form action="" method="post"> 
 
First Name:<input type="text" name="Fname" maxlength="12" size="12"/> <br/> 
 
Last Name:<input type="text" name="Lname" maxlength="36" size="12"/> <br/> 
 
Gender:<br/> 
 
Male:<input type="radio" name="gender" value="Male"/><br/> 
 
Female:<input type="radio" name="gender" value="Female"/><br/> 
 
Favorite Food:<br/> 
 
Steak:<input type="checkbox" name="food[]" value="Steak"/><br/> 
 
Pizza:<input type="checkbox" name="food[]" value="Pizza"/><br/> 
 
Chicken:<input type="checkbox" name="food[]" value="Chicken"/><br/> 
 
<textarea wrap="physical" cols="20" name="quote" rows="5">Enter your favorite quote!</textarea><br/> 
 
Select a Level of Education:<br/> 
 
<select name="education"> 
 
<option value="Jr.High">Jr.High</option> 
 
<option value="HighSchool">HighSchool</option> 
 
<option value="College">College</option></select><br/> 
 
Select your favorite time of day:<br/> 
 
<select size="3" name="TofD"> 
 
<option value="Morning">Morning</option> 
 
<option value="Day">Day</option> 
 
<option value="Night">Night</option></select> 
 
<p><input type="submit" /></p> 
 
</form> 
 
<h2>JSON</h2> 
 
<pre id="result"> 
 
</pre>

在這裏找到:http://jsfiddle.net/sxGtM/3/

1

考慮jQue RY的serializeArray()功能:

var results = $("#some_id").serializeArray(); 

這會給你,你可以在JavaScript中工作對象的數組。我不認爲你可以給這些對象的自定義名字,比如你想在這裏做我假設:

<input name="Document[0][category]" value="12" type="text"> 
      ^^^^^^^^^^^ 

如果需要來命名這些結果,我建議用jQuery將其序列化,然後將該數據傳輸到您自己的對象。

Working Fiddle

+0

輸入我試過'serializeArray'和'serialize'但不好 – bluesky

+1

也許描述他們爲什麼不適合你的需求 –