Tôi muốn có được hiệu ứng tương tự jQuery.serialize()
nhưng tôi chỉ muốn trả lại những phần tử con của một cái đã cho div
.
Kết quả mẫu:
single=Single2&multiple=Multiple&radio=radio1
Tôi muốn có được hiệu ứng tương tự jQuery.serialize()
nhưng tôi chỉ muốn trả lại những phần tử con của một cái đã cho div
.
Kết quả mẫu:
single=Single2&multiple=Multiple&radio=radio1
Câu trả lời:
Không vấn đề gì. Chỉ cần sử dụng những điều sau đây. Điều này sẽ hoạt động chính xác giống như tuần tự hóa một biểu mẫu nhưng thay vào đó sử dụng nội dung của div.
$('#divId :input').serialize();
Kiểm tra https://jsbin.com/xabureladi/1 để xem thử ( https://jsbin.com/xabureladi/1/edit để biết mã)
serialize
tất cả các phần tử biểu mẫu trong a div
.Bạn có thể làm điều đó bằng cách nhắm mục tiêu div #target-div-id
bên trong form
bằng cách sử dụng:
$('#target-div-id').find('select, textarea, input').serialize();
Chức năng tôi sử dụng hiện tại:
/**
* 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;
}
Cũng thử cái này:
$ ('# divId'). find ('input'). serialize ()
Còn giải pháp của tôi:
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');
Nếu các phần tử đó có tên lớp chung, người ta cũng có thể sử dụng tên này:
$('#your_div .your_classname').serialize()
Bằng cách này, bạn có thể tránh lựa chọn các nút, sẽ được chọn bằng cách sử dụng bộ chọn jQuery :input
. Mặc dù điều này cũng có thể tránh được bằng cách sử dụng$('#your_div :input:not(:button)').serialize();
$('#divId > input, #divId > select, #divId > textarea').serialize();
ID
trong mỗi bộ chọn, như $('#divId > input, #divId > select, #divId > textarea')
:; Ngoài ra, >
biểu tượng nó đề cập đến các yếu tố trẻ em trực tiếp ... Rất bất thường trong kịch bản này hoặc ít nhất, rất hạn chế.
$("#divId").find("select, textarea, input").serialize();
hiệu suất tốt hơn? Tôi tưởng tượng ở trên có thể bị chậm nếu div có nhiều phần tử, chẳng hạn như một bảng có nhiều hàng / cột.