Div öğesinin tüm alt girdileri nasıl alınır (jQuery)


158

HTML:

<div id="panel">
  <table>
    <tr>
       <td><input id="Search_NazovProjektu" type="text" value="" /></td>
    </tr>
    <tr>
       <td><input id="Search_Popis" type="text" value="" /></td>
    </tr>
  </table>
</div>

Belirli div tüm girişleri seçmek gerekir.

Bu çalışmıyor:

var i = $("#panel > :input");

Yanıtlar:


301

Şundan büyük olmadan kullanın:

$("#panel :input");

Bu >, sadece elemanın doğrudan çocuklarını ifade eder, derinlik ne olursa olsun tüm çocukları istiyorsanız sadece bir boşluk kullanın.


3
İlginç ... Şimdi kafam karıştı ... :Sahte dersler için, değil mi? Ancak bir eleman türü seçmek istiyoruz. Neden :?
mnemosyn

11
@mnemosyn - Bu `` onay kutusu '' gibi başka bir seçici türüdür, ayrıntılar için buraya bakın: api.jquery.com/input-selector Ve bunların daha eksiksiz bir listesi: api.jquery.com/category/selectors/form -selektörler
Nick Craver

74

İhtiyacın var

var i = $("#panel input"); 

veya tam olarak ne istediğinize bağlı olarak (aşağıya bakın)

var i = $("#panel :input"); 

>Eğer tüm alt istiyorum, çocuklara sınırlayacaktır.

EDIT: Nick'in işaret ettiği gibi, $("#panel input")ve arasında ince bir fark var $("#panel :input).

İlki sadece tip girişi, unsurlarını alır <input type="...">, ancak <textarea>, <button>ve <select>unsurları. Teşekkürler Nick, bunu kendim bilmiyordum ve görevimi buna göre düzelttim. Her iki seçeneği de bıraktım çünkü sanırım OP bunun da farkında değildi ve -teknik olarak- girdiler istedi ... :-)


Yani,: input tüm input / select / textarea alanlarını seçecek mi? Hepsi birden?
Yuri

Esasen, evet. Seçici bir eşleşme dizisi döndürür, bu yüzden ne demek istediğini tam olarak
bilmememe

1
Yani, sadece bu seçiciyle "hep birlikte". ": input selector Açıklama: Tüm giriş, metin alanı, seçme ve düğme öğelerini seçer." Bunu bilmiyordum, bundan sonra kullanacağım :)
Yuri

50

'Find' yöntemi, yeniden bakmak için önceden önbelleğe alınmış bir kabın tüm alt girdilerini almak için kullanılabilir (oysa 'children' yöntemi yalnızca hemen çocukları alır). Örneğin

var panel= $("#panel");
var inputs = panel.find("input");

5
Bu benim için mükemmel oldu - Ben döngü içinde $ (this) kullanarak geçerli öğeye erişiyorum anlamına gelir .each () kullanarak öğeleri üzerinde döngü. Sonuç olarak, cevaplarda başka türlü önerilenlerin çoğunu yapamıyorum. - Bunun yerine $ (this) .find ("input") yapabilirim; Teşekkürler.
djbp

29

Ruby on Rails veya Spring MVC gibi bir çerçeve kullanıyorsanız, kare parantezleri veya diğer karakterleri olan div'leri kullanmanız gerekebilir, bu izin verilemez document.getElementByIdve aynı türde birden fazla girişiniz varsa bu çözüm yine de çalışır.

var div = document.getElementById(divID);
$(div).find('input:text, input:password, input:file, select, textarea')
        .each(function() {
            $(this).val('');
        });
$(div).find('input:radio, input:checkbox').each(function() {
    $(this).removeAttr('checked');
    $(this).removeAttr('selected');
});

Bu örnekler, girişlerin nasıl temizleneceğini gösterir, örneğin, değiştirmeniz gerekir.


9
var i = $("#panel input");

çalışmalı :-)

> sadece doğrudan çocukları getirir, hiçbir çocuk çocuğu yoktur
: sözde sınıfları kullanmak içindir, örn. : fareyle üzerine gelme vb.

sözde sınıfların mevcut css seçicileri hakkında buradan bilgi edinebilirsiniz: http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors


6
@ henchman - :inputaynı zamanda bir seçicidir , api.jquery.com/category/selectors/form-selectors Bir <textarea>veya düğmesi inputolmasaydı bulamazdı:input , bu yüzden bir fark var.
Nick Craver

+1, dışarıda bırakmak> hile yapar. şimdi ben de tavsiye ettiğim sayfada buldum ....
Phil Rykoff

9

İşte yaklaşımım:

Başka bir olayda kullanabilirsiniz.

var id;
$("#panel :input").each(function(e){	
  id = this.id;
  // show id 
  console.log("#"+id);
  // show input value 
  console.log(this.value);
  // disable input if you want
  //$("#"+id).prop('disabled', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="panel">
  <table>
    <tr>
       <td><input id="Search_NazovProjektu" type="text" value="Naz Val" /></td>
    </tr>
    <tr>
       <td><input id="Search_Popis" type="text" value="Po Val" /></td>
    </tr>
  </table>
</div>

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.