Ich möchte den gleichen Effekt erzielen wie, jQuery.serialize()
aber ich möchte nur die Kinderelemente eines bestimmten zurückgeben div
.
Beispielergebnis:
single=Single2&multiple=Multiple&radio=radio1
Ich möchte den gleichen Effekt erzielen wie, jQuery.serialize()
aber ich möchte nur die Kinderelemente eines bestimmten zurückgeben div
.
Beispielergebnis:
single=Single2&multiple=Multiple&radio=radio1
Antworten:
Kein Problem. Verwenden Sie einfach Folgendes. Dies verhält sich genau wie das Serialisieren eines Formulars, verwendet jedoch stattdessen den Inhalt eines Div.
$('#divId :input').serialize();
Prüfen https://jsbin.com/xabureladi/1 für eine Demonstration ( https://jsbin.com/xabureladi/1/edit für den Code)
Sie können die Geschwindigkeit Ihres Codes verbessern, wenn Sie die Elemente einschränken, die von jQuery angezeigt werden.
Verwenden Sie den Selektor : Eingabe anstelle von * , um dies zu erreichen.
$('#divId :input').serialize()
Dadurch wird Ihr Code schneller, da die Liste der Elemente kürzer ist.
serialize
alle Formelemente innerhalb eines div
.Sie können dies tun, indem Sie auf das Div #target-div-id
in Ihrer form
Verwendung zielen :
$('#target-div-id').find('select, textarea, input').serialize();
Die Funktion, die ich derzeit benutze:
/**
* 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;
}
Versuchen Sie auch dies:
$ ('# divId'). find ('input'). serialize ()
Was ist mit meiner Lösung:
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');
Wenn diese Elemente einen gemeinsamen Klassennamen haben, kann man auch diesen verwenden:
$('#your_div .your_classname').serialize()
Auf diese Weise können Sie die Auswahl von Schaltflächen vermeiden, die mit dem jQuery-Selektor ausgewählt werden :input
. Dies kann jedoch auch durch Verwendung vermieden werden$('#your_div :input:not(:button)').serialize();
$('#divId > input, #divId > select, #divId > textarea').serialize();
ID
in jedem Selektor Folgendes angeben : $('#divId > input, #divId > select, #divId > textarea')
; Auch das >
Symbol , auf das es sich bezieht, bezieht sich auf direkte untergeordnete Elemente ... Sehr ungewöhnlich in diesem Szenario oder zumindest sehr restriktiv.
$("#divId").find("select, textarea, input").serialize();
eine bessere Leistung erzielen? Ich stelle mir vor, dass das oben Genannte langsam werden könnte, wenn das div viele Elemente hätte, wie eine Tabelle mit mehreren Zeilen / Spalten.