Come ottenere tutti gli input figlio di un elemento div (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>

Devo selezionare tutti gli input nel div specifico.

Questo non funziona:

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

Risposte:


301

Usalo senza il maggiore di:

$("#panel :input");

I >mezzi unici diretti figli dell'elemento, se si desidera che tutti i bambini, non importa la profondità basta usare uno spazio.


3
Interessante ... Ora sono confuso ... :È per le pseudo-classi, no? Ma vogliamo selezionare un tipo di elemento. Perché il :?
mnemosyn,

11
@mnemosyn - Questo è un altro tipo di selettore come `: checkbox ', vedi qui per i dettagli: api.jquery.com/input-selector Ed ecco un elenco più completo di questi: api.jquery.com/category/selectors/form -selettori
Nick Craver

74

Hai bisogno

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

o , a seconda di cosa esattamente vuoi (vedi sotto)

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

la >limiterà ai bambini, vuoi tutti i discendenti.

EDIT: Come Nick ha sottolineato, c'è una sottile differenza tra $("#panel input")e $("#panel :input).

Il primo recupererà solo elementi di input di tipo, ovvero <input type="...">, ma non <textarea>, <button>ed <select>elementi. Grazie Nick, non lo sapevo da solo e ho corretto di conseguenza il mio post. Lasciate entrambe le opzioni, perché immagino che l'OP non ne fosse a conoscenza e che, tecnicamente, abbia chiesto input ... :-)


Quindi: input selezionerà tutti i campi input / select / textarea? Tutto in una volta?
Yuri,

In sostanza sì. Il selettore restituisce una serie di corrispondenze, quindi immagino che potresti dire che lo fa "in una volta", anche se non sono perfettamente sicuro di cosa intendi con questo ...
mnemosyn,

1
Voglio dire, "tutti insieme" con solo quel selettore. ": selettore di input Descrizione: seleziona tutti gli elementi input, textarea, select e button." Non lo sapevo, lo userò d'ora in poi :)
Yuri,

50

Il metodo "find" può essere utilizzato per ottenere tutti gli input figlio di un contenitore che è già stato memorizzato nella cache per salvare la ricerca di nuovo (mentre il metodo "children" otterrà solo i figli immediati). per esempio

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

5
Questo è stato perfetto per me - sto eseguendo il ciclo degli elementi utilizzando .each (), il che significa che all'interno del ciclo accedo all'elemento corrente utilizzando $ (questo). Di conseguenza, non sono in grado di eseguire molto di ciò che è altrimenti suggerito nelle risposte. - Invece sono in grado di fare $ (questo) .find ("input"); Grazie.
djbp,

29

Se si utilizza un framework come Ruby on Rails o Spring MVC, potrebbe essere necessario utilizzare div con parentesi graffe quadrate o altri caratteri, che non sono autorizzati a utilizzare document.getElementByIde questa soluzione funziona ancora se si dispone di più input con lo stesso tipo.

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

Questo esempio mostra come cancellare gli input, per il tuo esempio dovrai cambiarlo.


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

dovrebbe funzionare :-)

il> prenderà solo i bambini diretti, nessun figlio dei bambini
il: è per usare le pseudo-classi, ad es. : hover, ecc.

puoi leggere i selettori CSS disponibili di pseudo-classi qui: http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors


6
@henchman - :inputè anche un selettore, api.jquery.com/category/selectors/form-selectors Se avesse un <textarea>pulsante o inputnon lo :inputtroverebbe, lo farebbe, quindi c'è una differenza.
Nick Craver

+1, quindi tralasciando> farà il trucco. ora l'ho trovato anche nella pagina che ho consigliato ....
Phil Rykoff

9

ecco il mio approccio:

Puoi usarlo in altri eventi.

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>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.