Comment obtenir toutes les entrées enfants d'un élément 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>

J'ai besoin de sélectionner toutes les entrées dans le div particulier.

Cela ne fonctionne pas:

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

Réponses:

301

Utilisez-le sans le plus grand que:

$("#panel :input");

Les >moyens ne dirigent que les enfants de l'élément, si vous voulez que tous les enfants, quelle que soit la profondeur, utilisez simplement un espace.

Nick Craver
la source
3
Intéressant ... Maintenant je suis confus ... C'est :pour les pseudo-classes, n'est-ce pas? Mais nous voulons sélectionner un type d'élément. Pourquoi le :?
mnemosyn
11
@mnemosyn - Ceci est un autre type de sélecteur comme `: checkbox 'est, voir ici pour plus de détails: api.jquery.com/input-selector Et voici une liste plus complète de ceux-ci: api.jquery.com/category/selectors/form -selectors
Nick Craver
74

Vous avez besoin

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

ou , selon ce que vous voulez exactement (voir ci-dessous)

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

le >limitera aux enfants, vous voulez tous les descendants.

EDIT: Comme Nick l'a souligné, il y a une différence subtile entre $("#panel input")et $("#panel :input).

Le premier ne récupérera que les éléments de type input, c'est-à-dire <input type="...">, mais pas <textarea>, <button>et les <select>éléments. Merci Nick, je ne le savais pas moi-même et j'ai corrigé mon message en conséquence. J'ai laissé les deux options, parce que je suppose que l'OP n'en était pas non plus conscient et - techniquement - a demandé des entrées ... :-)

mnemosyn
la source
Donc,: l'entrée sélectionnera tous les champs d'entrée / sélection / zone de texte? Tout à la fois?
Yuri du
Essentiellement, oui. Le sélecteur renvoie un tableau de correspondances, donc je suppose que vous pouvez dire qu'il le fait `` à la fois '', même si je ne suis pas tout à fait sûr de ce que vous entendez par là ...
mnemosyn
1
Je veux dire, "tous ensemble" avec juste ce sélecteur. ": sélecteur d'entrée Description: sélectionne tous les éléments d'entrée, de zone de texte, de sélection et de bouton." Je ne savais pas à ce sujet, je vais l'utiliser à partir de maintenant :)
Yuri
50

La méthode 'find' peut être utilisée pour obtenir toutes les entrées enfants d'un conteneur qui a déjà été mis en cache pour éviter de le rechercher à nouveau (alors que la méthode 'children' ne récupérera que les enfants immédiats). par exemple

var panel= $("#panel");
var inputs = panel.find("input");
Rob Willis
la source
5
C'était parfait pour moi - je boucle sur des éléments en utilisant .each () ce qui signifie que dans la boucle j'accède à l'élément actuel en utilisant $ (this). En conséquence, je suis incapable d'exécuter une grande partie de ce qui est suggéré par ailleurs dans les réponses. - Au lieu de cela, je suis capable de faire $ (this) .find ("input"); Merci.
djbp
29

Si vous utilisez un framework comme Ruby on Rails ou Spring MVC, vous devrez peut-être utiliser des div avec des accolades carrées ou d'autres caractères, qui ne sont pas autorisés, vous pouvez les utiliser document.getElementByIdet cette solution fonctionne toujours si vous avez plusieurs entrées du même type.

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

Cet exemple montre comment effacer les entrées, par exemple, vous devrez le changer.

Paulo Fidalgo
la source
9
var i = $("#panel input");

devrait marcher :-)

le> ne récupérera que les enfants directs, pas les enfants des enfants
le: est pour utiliser des pseudo-classes, par exemple. : survol, etc.

vous pouvez en savoir plus sur les sélecteurs css disponibles de pseudo-classes ici: http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors

Phil Rykoff
la source
6
@henchman - :inputest également un sélecteur, api.jquery.com/category/selectors/form-selectors S'il avait un <textarea>bouton ou inputne le trouverait pas, le :inputferait, il y a donc une différence.
Nick Craver
+1, donc laisser de côté> fera l'affaire. maintenant je l'ai aussi trouvé sur la page que j'ai recommandée ....
Phil Rykoff
9

voici ma démarche:

Vous pouvez l'utiliser dans d'autres cas.

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>

Uttam Kumar Roy
la source