首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jquery获取所有表单元素: input、textarea和select

jquery获取所有表单元素: input、textarea和select
EN

Stack Overflow用户
提问于 2012-10-12 23:41:42
回答 8查看 425.3K关注 0票数 123

在jquery中有没有一种简单的方法(不单独列出它们)来选择所有的表单元素,并且只选择表单元素。

我不能使用children()等,因为表单包含其他HTML。

例如:

$("form").each(function(){
    let $inputs = $("input, textarea, select", this);
});
EN

回答 8

Stack Overflow用户

发布于 2012-10-12 23:44:56

如果有其他类型,请编辑选择器:

var formElements = new Array();
$("form :input").each(function(){
    formElements.push($(this));
});

所有表单元素现在都在数组formElements中。

票数 15
EN

Stack Overflow用户

发布于 2014-03-10 07:45:18

jQuery保留了对普通JS表单元素的引用,这包含了对表单的所有子元素的引用。您可以简单地获取引用并继续操作:

var someForm = $('#SomeForm');

$.each(someForm[0].elements, function(index, elem){
    //Do something here.
});
票数 7
EN

Stack Overflow用户

发布于 2017-06-11 05:10:34

这是我最喜欢的功能,它对我来说就像是一个魔力!

它返回一个包含所有输入、选择和文本区数据的对象。

它试图通过查找元素名称、else Id、else类来获取对象名称。

var form_data = get_form_data();
console.log(form_data);

功能:

function get_form_data(element){
    element = element || '';
    var all_page_data = {};
    var all_forms_data_temp = {};
    if(!element){
        element = 'body';
    }

    if($(element)[0] == undefined){
        return null;
    }

    $(element).find('input,select,textarea').each(function(i){
        all_forms_data_temp[i] = $(this);
    });

    $.each(all_forms_data_temp,function(){
        var input = $(this);
        var element_name;
        var element_value;

        if((input.attr('type') == 'submit') || (input.attr('type') == 'button')){
            return true;
        }

        if((input.attr('name') !== undefined) && (input.attr('name') != '')){
            element_name = input.attr('name').trim();
        } else if((input.attr('id') !== undefined) && (input.attr('id') != '')){
            element_name = input.attr('id').trim();
        } else if((input.attr('class') !== undefined) && (input.attr('class') != '')){
            element_name = input.attr('class').trim();
        }

        if(input.val() !== undefined){
            if(input.attr('type') == 'checkbox'){
                element_value = input.parent().find('input[name="'+element_name+'"]:checked').val();
            } else if((input.attr('type') == 'radio')){
                element_value = $('input[name="'+element_name+'"]:checked',element).val();
            } else {
                element_value = input.val();
            }
        } else if(input.text() != undefined){
            element_value = input.text();
        }

        if(element_value === undefined){
            element_value = '';
        }

        if(element_name !== undefined){
            var element_array = new Array();
            if(element_name.indexOf(' ') !== -1){
                element_array = element_name.split(/(\s+)/);
            } else {
                element_array.push(element_name);
            }

            $.each(element_array,function(index, name){
                name = name.trim();
                if(name != ''){
                    all_page_data[name] = element_value;
                }
            });
        }
    });
    return all_page_data;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12862601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档