Comment sélectionner un élément dans jQuery en utilisant une variable pour l'ID?

100

Par exemple, ce qui suit sélectionne une division avec id = "2":

row = $("body").find("#2");

Comment faire quelque chose comme ça:

row_id = 5;
row = $("body").find(row_id);

La syntaxe ci-dessus produit une erreur. J'ai vérifié la documentation jQuery et les réponses ici sans succès.

Tony
la source
6
Wow, cinq réponses qui sont exactement les mêmes ...
Zifre

Réponses:

189
row = $("body").find('#' + row_id);

Plus important encore, faire le body.find supplémentaire n'a aucun impact sur les performances. La bonne façon de procéder est simplement:

row = $('#' + row_id);
Rick Hochstetler
la source
46

Le chemin le plus court serait:

$("#" + row_id)

Limiter la recherche au corps n'a aucun avantage.

En outre, vous devriez envisager de renommer vos ids en quelque chose de plus significatif (et compatible HTML selon la réponse de Paolo), surtout si vous avez un autre ensemble de données qui doit également être nommé.

John Rasch
la source
J'aime concis. Je viens de l'utiliser avec les info-bulles qTip2, fonctionne très bien. Je suis un peu curieux de savoir quelle est la pénalité de performance pour générer beaucoup de ces "juste à temps", par exemple en réponse à l'entrée de l'utilisateur.
PJ Brunet
26

Ce $('body').find();n'est pas nécessaire lors de la recherche par ID; il n'y a pas de gain de performance.

Veuillez également noter que le fait d'avoir un identifiant commençant par un nombre n'est pas un code HTML valide :

Les jetons ID et NOM doivent commencer par une lettre ([A-Za-z]) et peuvent être suivis de n'importe quel nombre de lettres, chiffres ([0-9]), tirets ("-"), traits de soulignement ("_") , deux points (":") et des points (".").

Paolo Bergantino
la source
6

Vous pouvez le faire comme ceci:

row_id = 5;
row = $("body").find('#'+row_id);
Amr Elgarhy
la source
1

Il y a deux problèmes avec votre code

  1. Pour trouver un élément par ID, vous devez le préfixer avec un "#"
  2. Vous essayez de transmettre un nombre à la fonction de recherche lorsqu'une chaîne est requise (en passant "#" + 5, cela résoudrait le problème, car cela convertirait d'abord le 5 en "5")
Bert Lamb
la source
0

Je ne sais pas grand-chose sur jQuery, mais essayez ceci:

row_id = "#5";
row = $("body").find(row_id);

Edit: Bien sûr, si la variable est un nombre, vous devez ajouter "#"au début:

row_id = 5
row = $("body").find("#"+row_id);
Zifre
la source