如何遍历表单jQuery的所有元素

Jim*_*Jim 38 jquery loops

我只是想知道循环遍历表单的所有子元素的最佳方法是什么?我的表单包含input和select元素.

目前我有:

success: function(data) {
                $.each(data.details, function(datakey, datavalue) {
                    $('#new_user_form > input').each(function(key, value) {
                        if($(this).attr('id') == datakey) {
                            $(this).val(datavalue);
                        }
                    });
                });
            }
Run Code Online (Sandbox Code Playgroud)

这只循环遍历表单的输入元素,我也想包含select元素:

我试过了:

$('#new_user_form > input, #new_user_form > select').each(function(key, value) {
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有谁知道为什么会发生这种情况?谢谢!

Ohg*_*why 72

从jQuery :输入选择器页面:

因为:input是jQuery扩展而不是CSS规范的一部分,使用:input的查询无法利用本机DOM querySelectorAll()方法提供的性能提升.要在使用时获得最佳性能:输入选择元素,首先使用纯CSS选择器选择元素,然后使用.filter(":input").

这是最好的选择.

$('#new_user_form *').filter(':input').each(function(){
    //your code here
});
Run Code Online (Sandbox Code Playgroud)

  • 逻辑是好的,但初始选择器是错误的。您正在过滤表单元素。要使用过滤器函数,您需要执行类似“#new_user_form *”之类的操作,以便仅过滤输入元素。 (3认同)
  • 这适用于非输入标签元素吗?比如“<select>...”和“<textarea>”? (3认同)
  • @Felipe是的,那些仍然被认为是在`:input`的范围内 (3认同)

小智 26

纯JavaScript并不难:

for(var i=0; i < form.elements.length; i++){
    var e = form.elements[i];
    console.log(e.name+"="+e.value);
}
Run Code Online (Sandbox Code Playgroud)

注意:因为form.elements是一个对象for-in循环不能按预期工作.

答案在这里(由Chris Pietschmann提供),在此记录(W3S).


小智 15

$('#new_user_form').find('input').each(function(){
   //your code here
});
Run Code Online (Sandbox Code Playgroud)

  • 这确实有效.如果你想获得选择和textareas:$('#new_user_form').find('input,textarea,select').each(function(){// your code here}); (10认同)

Sai*_*hna 11

取自#jquery Freenode IRC频道:

$.each($(form).serializeArray(), function(_, field) { /* use field.name, field.value */ });
Run Code Online (Sandbox Code Playgroud)

感谢@Cork在频道上的表现.


rom*_*ald 7

我正在使用:

$($('form').prop('elements')).each(function(){
    console.info(this)
});
Run Code Online (Sandbox Code Playgroud)

它看起来很丑,但对我来说,它仍然是使用jQuery.