<form id="foo">
    <input></input>
    <input></input>
    <input></input>
</form>

Je veux faire:

document.getElementById("foo").getElementsByTag("input")[1];

Mais dans jQuery. Je veux sélectionner un certain objet sous #foo par un index.

Ceci est ma première supposition sur la façon de procéder:

$('#foo input[1]').val("BlahBlah");

Je pense que ce serait la même chose en CSS aussi.

0
jdborg 15 nov. 2011 à 19:42

7 réponses

Meilleure réponse

Vous pouvez le faire de cette façon:

$('#foo input').eq(1).val("BlahBlah");

Cela vous donnera la deuxième entrée. Si vous voulez le premier, changez le 1 en 0. La fonction .eq() est basée sur 0.

4
arb 15 nov. 2011 à 15:43

Dans jQuery, deux méthodes sont définies pour sélectionner et utiliser des éléments d'une liste (objets DOM).

En utilisant:

var list = $("#foo");

Vous captureriez l'intégralité de #foo. Si vous recherchez la simplicité, vous pouvez obtenir les enfants (c'est-à-dire les champs de saisie) en utilisant var children = list.children(); Mais si vous voulez quelque chose qui ressemble un peu plus à findElementsByTag, vous pouvez utiliser var children = list.find('input'); (lequel bien sûr pourrait être un un liner, mais généralement vous voulez réutiliser la liste entière aussi)

Pour obtenir le premier et le dernier élément d'une certaine liste d'enfants, il existe des fonctions prédéfinies:

var first = children.first();
var last  = children.last(); 

Pour trouver un élément -nth, vous pouvez utiliser http://api.jquery.com/eq/ ou http://api.jquery.com/nth-child-selector/

Donc, vous obtiendrez (notez que cela fonctionne comme un tableau avec un index basé sur 0)

var second = children.eq(1);

Si vous aimez plus le style de sélecteur CSS, vous pouvez également essayer (notez l'index basé sur 1)

var second_b = $("#foo input:nth-child(2)");
3
Tessmore 15 nov. 2011 à 16:24
$('#foo :input').eq(1).val('BlahBlah')
2
Royi Namir 15 nov. 2011 à 15:44

Utilisez la pseudo-classe nth-child (n) comme ceci ...

$("#foo input:nth-child(0)").val("BlahBlah");
$("#foo input:nth-child(1)").val("BlahBlah");
.
.
.
$("#foo input:nth-child(n)").val("BlahBlah");
1
Moe Sweet 15 nov. 2011 à 15:45

Vous pouvez utiliser le sélecteur eq ():

$('#foo input:eq(1)').val("BlahBlah");
1
wsanville 15 nov. 2011 à 15:44

Vous pouvez utiliser le sélecteur eq. Il reçoit un index de base zéro:

$('#foo input:eq(1)').val('a value');
1
FishBasketGordo 15 nov. 2011 à 15:45

Je dirai :

$($('#foo input')[1]).val("BlahBlah");
0
Molochdaa 15 nov. 2011 à 15:44
8138969