web-dev-qa-db-fra.com

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

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

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

Comment puis-je faire quelque chose comme ça:

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

La syntaxe ci-dessus génère une erreur. J'ai vérifié la documentation de jQuery et y répond sans succès.

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

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

row = $('#' + row_id);
180
Rick Hochstetler

Le chemin le plus court serait:

$("#" + row_id)

Limiter la recherche au corps n'a aucun avantage.

En outre, vous devriez envisager de renommer votre ids en quelque chose de plus significatif (et conforme à HTML conformément à la réponse de Paolo), en particulier si vous avez également un autre ensemble de données à nommer.

44
John Rasch

Faire $('body').find(); n'est pas nécessaire pour rechercher par ID; il n'y a pas de gain de performance.

Veuillez également noter qu’un identifiant commençant par un numéro est HTML non valide :

Les jetons ID et NOM doivent commencer par une lettre ([A-Za-z]) et peuvent être suivis par un nombre quelconque de lettres, chiffres ([0-9]), traits d'union ("-"), traits de soulignement ("_") , deux points (":") et périodes (".").

26
Paolo Bergantino

Vous pouvez le faire comme ça:

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

Il y a deux problèmes avec votre code

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

Je ne connais pas grand chose à 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 "#" à l'avant:

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