jQuery

2011-11-28 10 views
12

içindeki textarea girişini belirleme Bir formda yineleme yapmak ve her öğeyi bir alana eklemek istiyorum. Sorun şu ki bu elemanlardan bazıları seç, giriş ve metin kutularıdır. Sorunu çözmek için :input'u kullanabileceğimi biliyorum (gerçi, gerçekten ihtiyacım yok). Sorun, elemanın bir textarea, input, select, vb. Olup olmadığını nasıl görebileceğimi belirleme konusunda sorun yaşıyorum. Bunu doğru şekilde yapmam gerekiyor çünkü bildiğim kadarıyla, jQuery("input#someinput").val() girişler için harika çalışıyor ama Bir textarea için jQuery("textarea#sometexarea").text()'a ihtiyacım olabilir. Burada şimdiye kadar benim işlevi var, neyse ...jQuery

bu varsa emin değilim: girdiler ve metin alanlarının her ikisi için

function getAllFormElements(id) { 

    var elements = new Array(); 

    jQuery(id).children().map(function(){ 

     for (var index = 0; index < children.length; index++) { 

      elements[i] = jQuery(children[i]).val(); 

     } 

    }) 

     return elements; 
} 

cevap

46

val() eser eşit derecede iyi olan <input>, <select> ve <textarea> unsurları. Hala :input selektör tarafından eşleştirilen öğelerin gerçek türünü belirlemek istiyorsanız

, sen element selectors ile is() kullanabilirsiniz:

$(":input").each(function() { 
    var $this = $(this); 
    if ($this.is("input")) { 
     // <input> element. 
    } else if ($this.is("select")) { 
     // <select> element. 
    } else if ($this.is("textarea")) { 
     // <textarea> element. 
    } 
}); 
+0

Mükemmel. Tam ihtiyacım olan şey. Teşekkür ederim. – zeboidlund

+0

+1, güzel çözüm 'Frédéric', bugün bulundu ve benim için de çalıştı. @aboutblank: Bu cevabı kabul edildi gibi kabul etmelisiniz. – Nope

+0

Sadece yaptım, bildirim için teşekkürler. :) – zeboidlund

0

$.val() eser. Tek başına "değer" olmayan div'lar gibi şeyler için yalnızca $.text()'a ihtiyacınız var.

3

jQuery'nin .is() işlevini kullanabilmeniz gerekir - sadece bir seçiciyi .is() öğesine geçirmeniz yeterlidir ve öğe seçiciyle eşleştiğinde bu değer true olarak geri döner. Yani, bir textarea olsaydı, sadece kontrol ediyorum görmek için:

if($(this).is("textarea")) { doStuff(); } 

http://api.jquery.com/is/

0

Are belki elemanın etiketi döndürür $(children[i]).attr("tagName");, arayan seçim, giriş veya textarea olmak mı?

3

nodeName özelliğine bakın.

jQuery(id).children().map(function(){ 
    console.log(children[i].nodeName.toLowerCase()); 
}); 

Sen ancak jQuery (burada havai) den is yöntemi kullanmak gerekmez olabilir. jQuery belgelerine baktığımızda

+0

' nodeName' kullanmak iyice, ama durumdan sakının.Belge türüne (HTML veya XML) bağlı olarak, döndürülen değer aynı olmaz (sırasıyla büyük harf veya olduğu gibi). –

+1

haklısın, kod snippet'ini güncelledim :) – pomeh

0

, kolayca $(:input) kullanarak tüm form girişlerini alabilirsiniz: http://api.jquery.com/input-selector/

Açıklama: tüm giriş, textarea seçin ve düğme elemanlarını seçer. :: Giriş seçici temelde tüm form kontrollerini seçer.

.val()

de metin alanları ile çalışır, ancak bir uyarı var ... başvuru için docs bkz: Frederic Ben bu yazmakta olduğu için onun cevabını ve kesinlikle is() kullanarak onun çözümünü yayınlanmıştır http://api.jquery.com/val/

kanıtlıyor.