你如何JSON序列化一组隐藏的输入值(可以使用jQuery)?

时间:2009-08-03 17:53:20

标签: javascript jquery json

我有以下DOM结构..

<input id="WorkAssignmentID_3462" type="hidden" value="3462" name="WorkAssignmentID"/>
<input id="WorkItemID_3462" type="hidden" value="3633" name="WorkItemID"/>
<input id="EmployeeID_3462" type="hidden" value="15" name="EmployeeID"/>
<input id="AssignedBy_3462" type="hidden" value="Jonathan Erickson" name="AssignedBy"/>
<input id="AssignedDate_3462" type="hidden" value="8/1/2009 12:00:00 AM" name="AssignedDate"/>
<input id="ExpirationDate_3462" type="hidden" value="" name="ExpirationDate"/>
<input id="RegisteredDate_3462" type="hidden" value="8/1/2009 12:00:00 AM" name="RegisteredDate"/>

让我们说jQuery选择器来获取所有这些DOM元素如下:

$('#assignment');

我想要做的是从该集创建一个JSON对象:

var WA = {
    WorkAssignmentID: '3462',
    WorkItemID: '3633',
    EmployeeID: '15',
    AssignedBy: 'Jonathan Erickson',
    AssignedDate: '8/1/2009 12:00:00 AM',
    ExpirationDate: '',
    RegisteredDate: '8/1/2009 12:00:00 AM',
};

最简单的方法是什么?

我正在考虑做这样的事情,但它不起作用,因为我认为你不能动态创建JSON对象的属性......是否可以动态创建属性名称?

var WA = {};

$('#assignment').each(function(idx, elem) {
    $.extend(WA, {
                     $(elem).attr('name'): $(elem).val()
                 });
});

2 个答案:

答案 0 :(得分:3)

如何使用bracket notation

var result = {};

$('input[type=hidden]').each(function() {
    result[this.name] = this.value;
});

答案 1 :(得分:2)

调用$ .extend()是过度的,IMO。但是你已经有了我使用的基本方法

var WA = {};
$('input[type="hidden"]').each( function( idx, elem )
{
  WA[elem.name] = elem.value;
}