jquery получить все элементы формы: input, textarea & select
есть ли простой способ (без перечисления их всех отдельно) в jquery, чтобы выбрать все элементы формы и только элементы формы.
Я не могу использовать children() и т. д., Потому что форма содержит другой HTML.
например:
$("form").each(function(){
$(this, "input, textarea, select");
});
8 ответов:
Edit: как отметил в комментарии (Марио Авад & Брок Хенсли), используйте
.findдля детей$("form").each(function(){ $(this).find(':input') //<-- Should return all input elements in that specific form. });формы также имеют коллекцию элементов, иногда это отличается от дочерних элементов, например, когда тег формы находится в таблице и не закрыт.
var summary = []; $('form').each(function () { summary.push('Form ' + this.id + ' has ' + $(this).find(':input').length + ' child(ren).'); summary.push('Form ' + this.id + ' has ' + this.elements.length + ' form element(s).'); }); $('#results').html(summary.join('<br />'));<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <form id="A" style="display: none;"> <input type="text" /> <button>Submit</button> </form> <form id="B" style="display: none;"> <select><option>A</option></select> <button>Submit</button> </form> <table bgcolor="white" cellpadding="12" border="1" style="display: none;"> <tr><td colspan="2"><center><h1><i><b>Login Area</b></i></h1></center></td></tr> <tr><td><h1><i><b>UserID:</b></i></h1></td><td><form id="login" name="login" method="post"><input name="id" type="text"></td></tr> <tr><td><h1><i><b>Password:</b></i></h1></td><td><input name="pass" type="password"></td></tr> <tr><td><center><input type="button" value="Login" onClick="pasuser(this.form)"></center></td><td><center><br /><input type="Reset"></form></td></tr></table></center> <div id="results"></div>
может быть : input селектор-это то, что вы хочу!--12-->
$("форма").каждая функция(){ $(': input', this)//как указано в docs
для достижения наилучшей производительности при использовании: ввод для выбора элементов, сначала выберите элементы с помощью чистого селектора CSS, а затем использовать .фильтр ("ввод").
вы можете использовать, как показано ниже,
$("form").each(function(){ $(this).filter(':input') //<-- Should return all input elements in that specific form. });
приведенный ниже код помогает получить подробную информацию об элементах из конкретной формы с идентификатором формы,
$('#formId input, #formId select').each( function(index){ var input = $(this); alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val()); } );приведенный ниже код помогает получить подробную информацию об элементах из всех форм, которые находятся на странице загрузки,
$('form input, form select').each( function(index){ var input = $(this); alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val()); } );приведенный ниже код помогает получить подробную информацию об элементах, которые находятся на странице загрузки, даже если элемент не находится внутри тега,
$('input, select').each( function(index){ var input = $(this); alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val()); } );Примечание: мы добавляем больше имени тега элемента, что мы нужно в списке объектов, как показано ниже,
Example: to get name of attribute "textarea", $('input, select, textarea').each( function(index){ var input = $(this); alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val()); } );
Если у вас есть дополнительные типы, изменение селектора:
var formElements = new Array(); $("form :input").each(function(){ formElements.push($(this)); });все элементы формы теперь находятся в массиве formElements.
Для справки: следующий фрагмент может помочь вам чтобы получить подробную информацию о вводе, textarea, select, button, a теги через временный заголовок при наведении их.
$( 'body' ).on( 'mouseover', 'input, textarea, select, button, a', function() { var $tag = $( this ); var $form = $tag.closest( 'form' ); var title = this.title; var id = this.id; var name = this.name; var value = this.value; var type = this.type; var cls = this.className; var tagName = this.tagName; var options = []; var hidden = []; var formDetails = ''; if ( $form.length ) { $form.find( ':input[type="hidden"]' ).each( function( index, el ) { hidden.push( "\t" + el.name + ' = ' + el.value ); } ); var formName = $form.prop( 'name' ); var formTitle = $form.prop( 'title' ); var formId = $form.prop( 'id' ); var formClass = $form.prop( 'class' ); formDetails += "\n\nFORM NAME: " + formName + "\nFORM TITLE: " + formTitle + "\nFORM ID: " + formId + "\nFORM CLASS: " + formClass + "\nFORM HIDDEN INPUT:\n" + hidden.join( "\n" ); } var tempTitle = "TAG: " + tagName + "\nTITLE: " + title + "\nID: " + id + "\nCLASS: " + cls; if ( 'SELECT' === tagName ) { $tag.find( 'option' ).each( function( index, el ) { options.push( el.value ); } ); tempTitle += "\nNAME: " + name + "\nVALUE: " + value + "\nTYPE: " + type + "\nSELECT OPTIONS:\n\t" + options; } else if ( 'A' === tagName ) { tempTitle += "\nHTML: " + $tag.html(); } else { tempTitle += "\nNAME: " + name + "\nVALUE: " + value + "\nTYPE: " + type; } tempTitle += formDetails; $tag.prop( 'title', tempTitle ); $tag.on( 'mouseout', function() { $tag.prop( 'title', title ); } ) } );
jQuery сохраняет ссылку на элемент формы vanilla JS, и это содержит ссылку на все дочерние элементы формы. Вы можете просто взять ссылку и продолжить:
var someForm = $('#SomeForm'); $.each(someForm[0].elements, function(index, elem){ //Do something here. });
var $form_elements = $("#form_id").find(":input");все элементы, включая кнопку submit, теперь находятся в переменной $form_elements.
Это моя любимая функция, и она работает как шарм для меня!
он возвращает объект со всеми входными, выделенными и текстовыми данными.
и он пытается получить имя объекта путем поиска элементов name else Id else class.
var All_Data = Get_All_Forms_Data(); console.log(All_Data);//-------------------------------------------
function Get_All_Forms_Data(Element) { Element = Element || ''; var All_Page_Data = {}; var All_Forms_Data_Temp = {}; if(Element != '') { $(Element).find('input,select,textarea').each(function(i){ All_Forms_Data_Temp[i] = $(this); }); } else { $('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') == 'radio') || (input.attr('type') == 'checkbox')) { Element_Value = jQuery('input[name="'+Element_Name+'"]:checked').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; }

Comments