¿Cómo selecciono un elemento en jQuery usando una variable para el ID?

100

Por ejemplo, lo siguiente selecciona una división con id = "2":

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

¿Cómo hago algo como esto?

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

La sintaxis anterior produce un error. Revisé la documentación de jQuery y las respuestas aquí sin éxito.

Tony
fuente
6
Vaya, cinco respuestas que son exactamente iguales ...
Zifre

Respuestas:

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

Más importante aún, hacer body.find adicional no tiene ningún impacto en el rendimiento. La forma correcta de hacer esto es simplemente:

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

El camino más corto sería:

$("#" + row_id)

Limitar la búsqueda al cuerpo no tiene ningún beneficio.

Además, debe considerar cambiar el nombre de sus mensajes de correo idelectrónico a algo más significativo (y compatible con HTML según la respuesta de Paolo), especialmente si tiene otro conjunto de datos que también necesita ser nombrado.

John Rasch
fuente
Me gusta la concisión. Acabo de usar esto con la información sobre herramientas qTip2, funciona muy bien. Tengo un poco de curiosidad por saber cuál es la penalización del rendimiento por generar muchos de estos "justo a tiempo", como en respuesta a la entrada del usuario.
PJ Brunet
26

Si lo hace $('body').find();, no es necesario cuando se esté buscando por ID; no hay ganancia de rendimiento.

Tenga en cuenta también que tener una identificación que comience con un número no es HTML válido :

Los tokens de ID y NOMBRE deben comenzar con una letra ([A-Za-z]) y pueden ir seguidos de cualquier número de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_") , dos puntos (":") y puntos (".").

Paolo Bergantino
fuente
6

Puedes hacerlo así:

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

Hay dos problemas con tu código

  1. Para buscar un elemento por ID, debe anteponerlo con un "#"
  2. Está intentando pasar un Número a la función de búsqueda cuando se requiere una Cadena (pasar "#" + 5 solucionaría esto, ya que convertiría el 5 en un "5" primero)
Bert Lamb
fuente
0

No sé mucho sobre jQuery, pero prueba esto:

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

Editar: Por supuesto, si la variable es un número, debe agregar "#"al frente:

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