$.serializers = { input: function(element) { switch (element.type.toLowerCase()) { case 'submit': case 'hidden': case 'password': case 'text': return $.serializers.textarea(element); case 'checkbox': case 'radio': return $.serializers.inputSelector(element); } }, inputSelector: function(element) { if (element.checked) return [element.name, element.value]; }, textarea: function(element) { return [element.name, element.value]; }, select: function(element) { return $.serializers[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); }, selectOne: function(element) { var value = '', opt, index = element.selectedIndex; if (index >= 0) { opt = element.options[index]; value = opt.value || opt.text; } return [element.name, value]; }, selectMany: function(element) { var value = []; for (var i = 0; i < element.length; i++) { var opt = element.options[i]; if (opt.selected) value.push(opt.value || opt.text); } return [element.name, value]; } }; $.fn.serialize = function() { var el = this.get(0); if (el.tagName == "FORM") { var pairs = []; this.find('input,select,textarea').each(function() { pairs.push($(this).serialize()); }); return pairs.join('&'); } else { var param = $.serializers[el.tagName.toLowerCase()](el); if (param) return [escape(param[0]), escape(param[1])].join('='); } }; $.fn.getValue = function() { var el = this.get(0); var param = $.serializers[el.tagName.toLowerCase()](el); if (param) return param[1]; };