Vorrei ottenere lo stesso effetto di, jQuery.serialize()
ma vorrei restituire solo gli elementi figlio di un dato div
.
Risultato del campione:
single=Single2&multiple=Multiple&radio=radio1
Vorrei ottenere lo stesso effetto di, jQuery.serialize()
ma vorrei restituire solo gli elementi figlio di un dato div
.
Risultato del campione:
single=Single2&multiple=Multiple&radio=radio1
Risposte:
Nessun problema. Basta usare quanto segue. Questo si comporterà esattamente come serializzare un modulo ma utilizzando invece il contenuto di un div.
$('#divId :input').serialize();
Controlla https://jsbin.com/xabureladi/1 per una dimostrazione ( https://jsbin.com/xabureladi/1/edit per il codice)
serialize
tutti gli elementi del modulo all'interno di un file div
.Puoi farlo prendendo di mira il div #target-div-id
all'interno del tuo form
utilizzo:
$('#target-div-id').find('select, textarea, input').serialize();
La funzione che utilizzo attualmente:
/**
* 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;
}
Prova anche questo:
$ ( '# DivId'). Find ( 'input'). Serialize ()
E la mia soluzione:
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');
Se questi elementi hanno un nome di classe comune, si può anche usare questo:
$('#your_div .your_classname').serialize()
In questo modo è possibile evitare la selezione dei pulsanti, che verranno selezionati utilizzando il selettore jQuery :input
. Anche se questo può essere evitato anche usando$('#your_div :input:not(:button)').serialize();
$('#divId > input, #divId > select, #divId > textarea').serialize();
ID
in ogni selettore, come $('#divId > input, #divId > select, #divId > textarea')
:; Inoltre, il >
simbolo si riferisce a elementi figli diretti ... Molto insolito in questo scenario o, almeno, molto restrittivo.
$("#divId").find("select, textarea, input").serialize();
otterresti prestazioni migliori? Immagino che quanto sopra potrebbe rallentare se il div avesse molti elementi, come una tabella con diverse righe / colonne.