Si mi html se ve así:
<td class="controlCell">
<input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>
¿Cómo puedo seleccionar # SearchBag.CompanyName con JQuery? No puedo hacer que funcione y me temo que es el punto lo que lo está rompiendo todo. Lo molesto es que renombrar todas mis identificaciones sería mucho trabajo, sin mencionar la pérdida de legibilidad.
Nota:
No comencemos a hablar sobre cómo las tablas no están hechas para el diseño. Soy muy consciente del valor y las deficiencias de CSS y trato de usarlo lo más posible.
Respuestas:
@Tomalak en comentarios:
"# Id.class" es un selector válido que requiere una identificación y una clase separada para que coincida; Es válido y no siempre es totalmente redundante.
La forma correcta de seleccionar un literal '.' en CSS es escapar de él: "#id \ .moreid". Esto solía causar problemas en algunos navegadores antiguos (en particular IE5.x), pero todos los navegadores de escritorio modernos lo admiten.
El mismo método parece funcionar en jQuery 1.3.2, aunque no lo he probado a fondo; quickExpr no lo recoge, pero el analizador selector más involucrado parece acertar:
fuente
$('[id="profile.birthdate"]')
Una variante sería esta:
fuente
No necesita escapar de nada si usa
document.getElementById
:getElementById
asume que la entrada es solo un atributo id, por lo que el punto no se interpretará como un selector de clase.fuente
Respuesta corta : si tiene un elemento con id =
"foo.bar"
, puede usar el selector$("#foo\\.bar")
Respuesta más larga : Esto es parte de la documentación de jquery - selectores de sección que puede encontrar aquí: http://api.jquery.com/category/selectors/
Su pregunta se responde justo al comienzo de la documentación:
fuente
La selección de atributos parece ser apropiada cuando su ID está en una variable:
fuente
Esto está documentado en la API de selectores jQuery :
En resumen, prefije el
.
con\\
.El problema es que
.
coincidirá con una clase, por$('#SearchBag.CompanyName')
lo que coincidiría<div id="SearchBag" class="CompanyName">
. El escapado\\.
será tratado como normal.
sin un significado especial, coincidiendo con la identificación que desee.Esto se aplica a todos los caracteres
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
que de otro modo tendrían un significado especial como selector en jQuery.fuente
Chicos que buscan una solución más genérica, encontré una solución que inserta una barra hacia atrás antes de cualquier carácter especial, esto resuelve problemas relacionados con la recuperación de nombre e ID de un div que contiene caracteres especiales.
Espero que esto sea útil!
fuente
Puede usar un selector de atributos:
O puede especificar el tipo de elemento:
fuente