Yalnızca bir div içindeki öğeleri serileştirmek için jQuery


111

Ben de aynı etkiyi elde etmek jQuery.serialize()isterdim , ancak bir verilenin sadece çocuk özelliklerini iade etmek isterim div.

Örnek sonuç:

single=Single2&multiple=Multiple&radio=radio1

Yanıtlar:


277

Sorun değil. Sadece aşağıdakileri kullanın. Bu, tam olarak bir formu serileştirmek gibi, ancak bunun yerine bir div içeriğini kullanır.

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

Bir gösteri için https://jsbin.com/xabureladi/1 adresini kontrol edin ( kod için https://jsbin.com/xabureladi/1/edit )


58
Daha $("#divId").find("select, textarea, input").serialize();iyi performans sağlamaz mı? Div, birkaç satır / sütun içeren bir tablo gibi çok sayıda öğeye sahip olsaydı, yukarıdakilerin yavaşlayabileceğini hayal ediyorum.
David Murdoch

3
Diğer yanıtlarda listelendiği gibi, $ ('# divId: input']. Serialize () daha verimli olacaktır.
jfountain

2
@EaterOfCorpses bu test etmenin çok doğru bir yolu değil. İfadelerin sırasını değiştirirseniz, gerçekten bir fark olmadığını fark edeceksiniz: jsfiddle.net/QAKjN/10 . Oyunda seçicilerden daha fazlası var
Rondel

2
Açıkçası, bu aynı zamanda yalnızca girdileri serileştirir, bu yüzden David Murdochs yorumu bunu yapmanın doğru yolu olacaktır.
süper

2
jQuery: "Çünkü: input bir jQuery uzantısıdır ve CSS belirtiminin bir parçası değildir, şunu kullanan sorgular: input yerel DOM querySelectorAll () yöntemi tarafından sağlanan performans artışından yararlanamaz." $ ('[ad]') kullanmak daha iyi olacaktır: document.querySelectorAll ('[ad]');
Abdullah Aydın

22

JQuery'nin bakacağı öğeleri kısıtlarsanız, kodunuzun hızını artırabilirsiniz.

Bunu başarmak için * yerine selector : input'u kullanın .

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

Bu, kodunuzun daha hızlı olmasını sağlar çünkü öğe listesi daha kısadır.


15

serializeiçindeki tüm form öğeleri div.

Bunu, kullanımınızın #target-div-idiçindeki div'i hedefleyerek yapabilirsiniz form:

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

5

Şu anda kullandığım işlev:

/**
 * 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
Ayrıca .find ('[ad]'). Serialize (); 'serileştirilebilir' öğeleri filtrelemek için kullanılabilir.
Abdullah Aydın

3

Ayrıca şunu da deneyin:

$ ( '# Divld'). ( 'Giriş') bulabilirsiniz. Serialize ()


6
Bu, div'deki belirli öğeleri ve metin alanlarını serileştirmez
Jeff Walker Code Ranger

Bu, seçme ve metin alanı sorununu düzeltir: <code> $ ("# divId"). Find ("seç, metin alanı, girdi"). Serialize (); <// code>
TroySteven

3

Ya benim çözümüm:

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

Bu elemanların ortak bir sınıf adı varsa, bu da kullanılabilir:

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

Bu şekilde, jQuery seçici kullanılarak seçilecek olan düğmelerin seçiminden kaçınabilirsiniz :input. Bununla birlikte, bu da kullanılarak önlenebilir.$('#your_div :input:not(:button)').serialize();


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

1
Virgül kullanılırsa, IDher bir seçicide aşağıdaki gibi belirtmeniz gerekir $('#divId > input, #divId > select, #divId > textarea'):; Ayrıca, >sembolü doğrudan alt unsurlara atıfta bulunuyor ... Bu senaryoda çok sıra dışı veya en azından çok kısıtlayıcı.
gmo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.