これは古い投稿ですが、私は自分の考えを追加したいと思いました。以下のリンクからソースコードをコピーすると、返された配列に任意の要素属性を追加できます。このように、実装はまさにjQueryの実装です。はい、jQueryソースが更新された場合は手動でコードを更新する必要がありますが、それは他の解決策と同じです。
https://searchcode.com/codesearch/view/25323764/
var
rbracket = /\[\]$/,
rCRLF = /\r?\n/g,
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
rsubmittable = /^(?:input|select|textarea|keygen)/i,
rcheckableType = /^(?:checkbox|radio)$/i;
$.fn.extend({
customSerializeArray: function() {
return this.map(function() {
// Can add propHook for 'elements' to filter or add form elements
var elements = $.prop(this, 'elements');
return elements ? $.makeArray(elements) : this;
})
.filter(function() {
var type = this.type;
// Use .is(':disabled') so that fieldset[disabled] works
return this.name && !$(this).is(':disabled') &&
rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
(this.checked || !rcheckableType.test(type));
})
.map(function(i, elem) {
var val = $(this).val();
if (val == null) {
return null;
}
if ($.isArray(val)) {
return $.map(val, function(val) {
return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
});
}
return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
}).get();
}
});