jQuery untuk membuat serialisasi hanya elemen dalam div


111

Saya ingin mendapatkan efek yang sama seperti jQuery.serialize()tetapi saya hanya ingin mengembalikan elemen anak yang diberikan div.

Hasil sampel:

single=Single2&multiple=Multiple&radio=radio1

Jawaban:


277

Tidak masalah. Cukup gunakan yang berikut ini. Ini akan berperilaku persis seperti serialisasi formulir tetapi menggunakan konten div sebagai gantinya.

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

Periksa https://jsbin.com/xabureladi/1 untuk demonstrasi ( https://jsbin.com/xabureladi/1/edit untuk kode)


58
Bukankah kamu akan $("#divId").find("select, textarea, input").serialize();menghasilkan kinerja yang lebih baik? Saya membayangkan hal di atas bisa menjadi lambat jika div memiliki banyak elemen, seperti tabel dengan beberapa baris / kolom.
David Murdoch

3
Seperti yang tercantum dalam jawaban lain, $ ('# divId: input'). Serialize () akan lebih efisien.
jfountain

2
@EaterOfCorpses itu bukan cara yang sangat akurat untuk menguji. Jika Anda mengganti urutan pernyataan, Anda akan melihat bahwa sebenarnya tidak ada perbedaan apa pun: jsfiddle.net/QAKjN/10 . Ada lebih banyak permainan daripada penyeleksi
Rondel

2
Jelas ini juga hanya masukan serialisasi, jadi komentar David Murdoch akan menjadi cara yang tepat untuk melakukannya.
superfonik

2
jQuery: "Karena: input adalah ekstensi jQuery dan bukan bagian dari spesifikasi CSS, kueri yang menggunakan: input tidak dapat memanfaatkan peningkatan kinerja yang disediakan oleh metode native DOM querySelectorAll ()." menggunakan $ ('[name]') akan lebih baik: document.querySelectorAll ('[name]');
Abdullah Aydın

22

Anda dapat meningkatkan kecepatan kode Anda jika Anda membatasi item yang akan dilihat jQuery.

Gunakan selector : input, bukan * untuk mencapainya.

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

Ini akan membuat kode Anda lebih cepat karena daftar item lebih pendek.


15

serializesemua elemen bentuk dalam a div.

Anda dapat melakukannya dengan menargetkan div #target-div-iddi dalam formpenggunaan Anda :

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

5

Fungsi yang saya gunakan saat ini:

/**
 * 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
Juga .find ('[name]'). Serialize (); dapat digunakan untuk memfilter elemen 'serializable'.
Abdullah Aydın

3

Coba juga ini:

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


6
Ini tidak akan membuat serial elemen dan area teks terpilih di div
Jeff Walker Code Ranger

Ini memperbaiki masalah pemilihan dan textarea: <code> $ ("# divId"). Find ("select, textarea, input"). Serialize (); <// code>
TroySteven

3

Bagaimana dengan solusi saya:

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

Jika elemen tersebut memiliki nama kelas yang sama, seseorang juga dapat menggunakan ini:

$('#your_div .your_classname').serialize()

Dengan cara ini Anda dapat menghindari pemilihan tombol, yang akan dipilih menggunakan selektor jQuery :input. Padahal ini juga bisa dihindari dengan menggunakan$('#your_div :input:not(:button)').serialize();


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

1
Jika koma digunakan, maka Anda perlu menentukan IDdi setiap selektor, seperti $('#divId > input, #divId > select, #divId > textarea'):; Juga, >simbol itu mengacu pada elemen anak langsung ... Sangat tidak biasa dalam skenario ini atau setidaknya, sangat membatasi.
gmo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.