¿Cómo seleccionar nodos html por ID con jquery cuando el id contiene un punto?

Resuelto Boris Callens asked hace 15 años • 8 respuestas

Si mi html se viera así:

<td class="controlCell">
    <input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>

¿Cómo podría seleccionar #SearchBag.CompanyName con JQuery? No logro hacerlo funcionar y me temo que es el punto el que lo está rompiendo todo. Lo molesto es que cambiar el nombre de todas mis identificaciones sería mucho trabajo, sin mencionar la pérdida de legibilidad.

Nota:
Por favor, no comencemos a hablar de que las mesas no están hechas para ser diseñadas. Soy muy consciente del valor y las deficiencias de CSS y me esfuerzo por usarlo tanto como sea posible.

Boris Callens avatar Mar 03 '09 16:03 Boris Callens
Aceptado

@Tomalak en comentarios:

Dado que los selectores de ID deben ir precedidos de un hash #, no debería haber ambigüedad aquí.

“#id.class” es un selector válido que requiere una identificación y una clase separada para coincidir; es válido y no siempre 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 detecta, pero el analizador selector más complicado parece hacerlo bien:

$('#SearchBag\\.CompanyName');
bobince avatar Mar 03 '2009 10:03 bobince

Una variante sería esta:

$("input[id='SearchBag.CompanyName']")
Tomalak avatar Mar 03 '2009 09:03 Tomalak

No necesitas escapar de nada si usas document.getElementById:

$(document.getElementById('strange.id[]'))

getElementByIdasume que la entrada es solo un atributo de identificación, por lo que el punto no se interpretará como un selector de clase.

Blender avatar Jun 06 '2013 05:06 Blender