Chciałbym uzyskać taki sam efekt jak jQuery.serialize()
ale chciałbym zwrócić tylko elementy potomne danego div
.
Przykładowy wynik:
single=Single2&multiple=Multiple&radio=radio1
Chciałbym uzyskać taki sam efekt jak jQuery.serialize()
ale chciałbym zwrócić tylko elementy potomne danego div
.
Przykładowy wynik:
single=Single2&multiple=Multiple&radio=radio1
Odpowiedzi:
Nie ma problemu. Po prostu użyj następujących. Będzie to zachowywać się dokładnie tak, jak serializowanie formularza, ale zamiast tego używa się zawartości elementu div.
$('#divId :input').serialize();
Sprawdź https://jsbin.com/xabureladi/1, aby zobaczyć demonstrację ( https://jsbin.com/xabureladi/1/edit, aby uzyskać kod)
serialize
wszystkie elementy formy w pliku div
.Możesz to zrobić, kierując element div #target-div-id
wewnątrz swojego form
za pomocą:
$('#target-div-id').find('select, textarea, input').serialize();
Funkcja, której obecnie używam:
/**
* 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;
}
Spróbuj także tego:
$ ('# divId'). find ('input'). serialize ()
A co z moim rozwiązaniem:
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');
Jeśli te elementy mają wspólną nazwę klasy, można również użyć tego:
$('#your_div .your_classname').serialize()
W ten sposób można uniknąć wybierania przycisków, które zostaną wybrane za pomocą selektora jQuery :input
. Chociaż można tego również uniknąć, używając$('#your_div :input:not(:button)').serialize();
$('#divId > input, #divId > select, #divId > textarea').serialize();
ID
w każdym selektorze, na przykład $('#divId > input, #divId > select, #divId > textarea')
:; Również >
symbol odnosi się do bezpośrednich elementów dziecięcych ... Bardzo nietypowe w tym scenariuszu lub przynajmniej bardzo restrykcyjne.
$("#divId").find("select, textarea, input").serialize();
byłoby lepszej wydajności? Wyobrażam sobie, że powyższe mogłoby działać wolno, gdyby element div miał wiele elementów, na przykład tabelę z kilkoma wierszami / kolumnami.