jQuery để chỉ tuần tự hóa các phần tử trong một div


111

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:


277

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ã)


58
Bạn sẽ không tạo ra $("#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.
David Murdoch

3
Như được liệt kê trong các câu trả lời khác, $ ('# divId: input'). Serialize () sẽ hiệu quả hơn.
jfountain

2
@EaterOfCorpses đó không phải là cách kiểm tra rất chính xác. Nếu bạn chuyển đổi thứ tự của các câu lệnh, bạn sẽ nhận thấy rằng thực sự không có bất kỳ sự khác biệt nào: jsfiddle.net/QAKjN/10 . Có nhiều vở kịch hơn selectors trong
Rondel

2
Rõ ràng điều này cũng chỉ tuần tự hóa các đầu vào, vì vậy bình luận của David Murdochs sẽ là cách đúng đắn để làm điều đó.
siêu âm vào

2
jQuery: "Bởi vì: input là một phần mở rộng của jQuery và không phải là một phần của đặc tả CSS, các truy vấn sử dụng: input không thể tận dụng lợi thế của việc tăng hiệu suất được cung cấp bởi phương thức DOM querySelectorAll ()." sử dụng $ ('[name]') sẽ tốt hơn: document.querySelectorAll ('[name]');
Abdullah Aydın

22

Bạn có thể cải thiện tốc độ mã của mình nếu bạn hạn chế các mục mà jQuery sẽ xem xét.

Sử dụng bộ chọn : đầu vào thay vì * để đạt được nó.

$('#divId :input').serialize()

Điều này sẽ làm cho mã của bạn nhanh hơn vì danh sách các mục ngắn hơn.


15

serializetấ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-idbên trong formbằng cách sử dụng:

$('#target-div-id').find('select, textarea, input').serialize();

5

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;
}

2
Ngoài ra .find ('[name]'). Serialize (); có thể được sử dụng để lọc các phần tử 'có thể tuần tự hóa'.
Abdullah Aydın

3

Cũng thử cái này:

$ ('# divId'). find ('input'). serialize ()


6
Điều này sẽ không serialize chọn các yếu tố và textareas trong div
Jeff Walker Mã Ranger

Điều này khắc phục sự cố select và textarea: <code> $ ("# divId"). Find ("select, textarea, input"). Serialize (); <// code>
TroySteven

3

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');


0

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();


0
$('#divId > input, #divId > select, #divId > textarea').serialize();

1
Nếu dấu phẩy được sử dụng, thì bạn cần chỉ định IDtrong 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ế.
gmo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.