remove - jQuery para serializar solo elementos dentro de un div
remove text jquery (8)
Me gustaría obtener el mismo efecto que jQuery.serialize()
pero me gustaría devolver solo los elementos secundarios de un div
dado.
Resultado de la muestra:
single=Single2&multiple=Multiple&radio=radio1
serialize
todos los elementos de formulario dentro de un div
.
Puede hacerlo apuntando a div #target-div-id
dentro de su form
usando:
$(''#target-div-id'').find(''select, textarea, input'').serialize();
Espero que esto ayude.
¿Qué hay de mi solución?
function serializeDiv( $div, serialize_method )
{
// Accepts ''serialize'', ''serializeArray''; Implicit ''serialize''
serialize_method = serialize_method || ''serialize'';
// Unique selector for wrapper forms
var inner_wrapper_class = ''any_unique_class_for_wrapped_content'';
// Wrap content with a form
$div.wrapInner( "<form class=''"+inner_wrapper_class+"''></form>" );
// Serialize inputs
var result = $(''.''+inner_wrapper_class, $div)[serialize_method]();
// Eliminate newly created form
$(''.script_wrap_inner_div_form'', $div).contents().unwrap();
// Return result
return result;
}
/* USE: */
// For: $(''#div'').serialize()
serializeDiv($(''#div'')); /* or */ serializeDiv($(''#div''), ''serialize'');
// For: $(''#div'').serializeArray()
serializeDiv($(''#div''), ''serializeArray'');
function serializeDiv( $div, serialize_method )
{
// Accepts ''serialize'', ''serializeArray''; Implicit ''serialize''
serialize_method = serialize_method || ''serialize'';
// Unique selector for wrapper forms
var inner_wrapper_class = ''any_unique_class_for_wrapped_content'';
// Wrap content with a form
$div.wrapInner( "<form class=''"+inner_wrapper_class+"''></form>" );
// Serialize inputs
var result = $(''.''+inner_wrapper_class, $div)[serialize_method]();
// Eliminate newly created form
$(''.script_wrap_inner_div_form'', $div).contents().unwrap();
// Return result
return result;
}
/* USE: */
var r = serializeDiv($(''#div'')); /* or serializeDiv($(''#div''), ''serialize''); */
console.log("For: $(''#div'').serialize()");
console.log(r);
var r = serializeDiv($(''#div''), ''serializeArray'');
console.log("For: $(''#div'').serializeArray()");
console.log(r);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div">
<input name="input1" value="input1_value">
<textarea name="textarea1">textarea_value</textarea>
</div>
La función que uso actualmente:
/**
* Serializes form or any other element with jQuery.serialize
* @param el
*/
serialize: function(el) {
var serialized = $(el).serialize();
if (!serialized) // not a form
serialized = $(el).
find(''input[name],select[name],textarea[name]'').serialize();
return serialized;
}
No hay problema. Solo usa lo siguiente. Esto se comportará exactamente como serializar un formulario, pero usando un contenido de div en su lugar.
$(''#divId :input'').serialize();
Consulte http://jsbin.com/azodo para obtener una demostración ( http://jsbin.com/azodo/edit para obtener el código)
Pruebe también esto:
$ (''# divId''). find (''input''). serialize ()
Puede mejorar la velocidad de su código si restringe los elementos que verá jQuery.
Use el selector : ingrese en lugar de * para lograrlo.
$(''#divId :input'').serialize()
Esto hará que su código sea más rápido porque la lista de artículos es más corta.
Si esos elementos tienen un nombre de clase común, uno también puede usar esto:
$(''#your_div .your_classname'').serialize()
De esta forma puede evitar la selección de botones, que se seleccionarán mediante el selector jQuery :input
. Aunque esto también se puede evitar usando $(''#your_div :input:not(:button)'').serialize();
$(''#divId > input, #divId > select, #divId > textarea'').serialize();