Javascript jQuery$(':input').serializeArray();使用本机API的函数

Javascript jQuery$(':input').serializeArray();使用本机API的函数,javascript,jquery,Javascript,Jquery,如何编写这个jQuery函数,或者更确切地说,仅使用JavaScript生成相同的结果 $(':input').serializeArray(); 看看: 当然,这假设这是一个jQuery对象,具有.filter和.map等方法。这些方法也可用于ECMAScript 5中的数组,因此,如果您不需要支持IE

如何编写这个jQuery函数,或者更确切地说,仅使用JavaScript生成相同的结果

$(':input').serializeArray();

看看:

当然,这假设这是一个jQuery对象,具有.filter和.map等方法。这些方法也可用于ECMAScript 5中的数组,因此,如果您不需要支持IE<9,那么在删除或重写jQuery处理的角案例后,这段代码可能在这是HtmleElements数组的情况下工作。如果您需要支持旧浏览器,那么您可能应该只使用jQuery。

查看:

当然,这假设这是一个jQuery对象,具有.filter和.map等方法。这些方法也可用于ECMAScript 5中的数组,因此,如果您不需要支持IE<9,那么在删除或重写jQuery处理的角案例后,这段代码可能在这是HtmleElements数组的情况下工作。如果您需要支持旧浏览器,那么您可能应该只使用jQuery。

jQuery:input选择器相当于:

var elements = document.querySelectorAll('input, button, textarea, select');
元素将是匹配元素的静态集合。可以使用getElementsByTagName和每个不同的标记名构建类似的数组

.serializeArray创建一个OJBECT数组,如:

[{name: value},{name:value},...];    
要序列化元素,请遵循HTML5规范中的算法。请注意,jQuery不提交submit按钮,这与W3C规范和浏览器行为背道而驰,您可能希望模仿或不模仿它

SajithNair的评论中有一个很好的解释,这不是完美的,但从98%来说是一个很好的开始

基本策略是循环成员并处理每种不同的类型,从成功的控件创建对象,即具有名称和值且未被禁用的控件,并在“选择”中选中“单选”和“复选框”输入以及“选择”中的“选项”,记住要处理多个选择,这些选择的唯一成员是元素名和元素值

如果有多个控件具有相同的属性,则将有多个对象具有相同的命名属性,但可能具有不同的值

要做到这一点的代码并不困难,但要彻底地编写和测试代码有点冗长和乏味。当你陷入困境时,试着寻求帮助

jQuery:input选择器相当于:

var elements = document.querySelectorAll('input, button, textarea, select');
元素将是匹配元素的静态集合。可以使用getElementsByTagName和每个不同的标记名构建类似的数组

.serializeArray创建一个OJBECT数组,如:

[{name: value},{name:value},...];    
要序列化元素,请遵循HTML5规范中的算法。请注意,jQuery不提交submit按钮,这与W3C规范和浏览器行为背道而驰,您可能希望模仿或不模仿它

SajithNair的评论中有一个很好的解释,这不是完美的,但从98%来说是一个很好的开始

基本策略是循环成员并处理每种不同的类型,从成功的控件创建对象,即具有名称和值且未被禁用的控件,并在“选择”中选中“单选”和“复选框”输入以及“选择”中的“选项”,记住要处理多个选择,这些选择的唯一成员是元素名和元素值

如果有多个控件具有相同的属性,则将有多个对象具有相同的命名属性,但可能具有不同的值


要做到这一点的代码并不困难,但要彻底地编写和测试代码有点冗长和乏味。当你陷入困境时,试着寻求帮助

这里有一个相当简单的方法,适用于大多数表单:

[].slice.call(document.querySelectorAll('input[name]:not([disabled]), textarea[name]:not([disabled]), select[name]:not([disabled])')).reduce(function(a,b,i){
  var val= String({checkbox:1,radio:1}[b.type] ? b.checked : b.value).replace(/\r?\n/g, "\r\n");
  a[b.name]=  a[b.name] ?  a[b.name].concat(val) :val;
 return a;
}, {});
它不像真正的表单那样处理命名提交或图像类型,但这些输入的适用性实际上只有在单击时才知道,因此对于手动序列化程序来说没有意义。如果您确实需要,您可以使用几个onclick来模拟图像输入和命名提交的传统功能,而这可能不是


此版本使用键:值对或键:[value1,value2]数组的平面对象进行重复。

这里有一个相当简单的方法,适用于大多数表单:

[].slice.call(document.querySelectorAll('input[name]:not([disabled]), textarea[name]:not([disabled]), select[name]:not([disabled])')).reduce(function(a,b,i){
  var val= String({checkbox:1,radio:1}[b.type] ? b.checked : b.value).replace(/\r?\n/g, "\r\n");
  a[b.name]=  a[b.name] ?  a[b.name].concat(val) :val;
 return a;
}, {});
它不像真正的表单那样处理命名提交或图像类型,但这些输入的适用性实际上只有在单击时才知道,因此对于手动序列化程序来说没有意义。如果您确实需要,您可以使用几个onclick来模拟图像输入和命名提交的传统功能,而这可能不是

此版本使用key:value对或key:[value1,value2]数组的平面对象进行重复。

Perahaps仅使用JavaScript不清楚。好的,jQuery是javascript,但是我假设OP不想使用任何jQuery函数。好的,jQuery是javascript,但我假设OP不想使用任何jQuery函数。