如何在jQuery中从多个字段序列化为一个对象数组?

时间:2010-03-30 09:57:03

标签: jquery json jquery-selectors

我正在使用jQuery动态添加包含几个字段的新div。 我在这个输出示例中添加了新的曲调:

<div id="uploadedTunes">
   <div class="tune">
     Title:<input type="text" name="Title">
     Length:<input type="text" name="Length"> 
   </div>
   <div class="tune">
     Title:<input type="text" name="Title">
     Length:<input type="text" name="Length"> 
   </div>
</div>

有没有办法只序列化div uploadTunes中的字段(而不是整个表单)? 我如何序列化这个,所以我有一个这样的数组:

uploadedTunes { 调{  标题=“高速公路到地狱”,  长度= “03:01” } }

感谢您的帮助或线索!

2 个答案:

答案 0 :(得分:2)

在#uploadedTunes上使用serializeArray()

例如:

  jQuery.ajax({
    data : jQuery.param(jQuery(this).serializeArray()),
    dataType : 'script', 
    type:'post', 
    url:'/path/to/somewhere'
  }); 

我不确定它是否适用于除表格之外的其他内容。

答案 1 :(得分:2)

DEMO: http://jsbin.com/aneme/4/edit

包括jquery json lib

  

http://jquery-json.googlecode.com/files/jquery.json-1.3.min.js

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            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() {  
  //define the array
  var tune = []; 
  //start looping
  $('#uploadedTunes .tune').each(function(i , e) { 
 //automatically add to each pair of tune elements an equal class name
   $(this).children().attr('class','tune_'+i);  
  //create and convert the array to JSON
  tune.push( $.toJSON( $('.tune_'+i).serializeObject() ) );
  });
  //join all tunes into one comma separated sting
  var uploadedTunes = tune.join(",");
  alert( uploadedTunes );
});

注意: 大多数人认为 serializeArray()仅适用于 FORM ,这不完全正确,它也可以通过给每个要序列化相同类的元素而无形式地工作!然后序列化这个类而不是形式!