2011-07-23 15 views
14

Tengo un elemento con id = "A B". El código siguiente falla:jQuery: ocuparse de un espacio en el atributo de id

<input type="text" id="A B"> 
<script>$("#A B").click(function(){alert();});</script> 

el código siguiente no falla:

<input type="text" id="AB"> 
<script>$("#AB").click(function(){alert();});</script> 
+0

posible duplicado de [ID de jQuery con espacios] (http://stackoverflow.com/questions/596314/jquery-ids- with-spaces) –

Respuesta

24

Si bien es técnicamente válido para tener un espacio en un ID de atribuir valor en HTML (ver @ respuesta de karim79) , puedes seleccionarlo usando jQuery.

Ver http://mothereffingcssescapes.com/#A%20B:

<script> 
    // document.getElementById or similar 
    document.getElementById('A B'); 
    // document.querySelector or similar 
    $('#A\\ B'); 
</script> 

jQuery utiliza una sintaxis similar a la API de selectores, así que podría usar $('#A\\ B'); para seleccionar el elemento con id="A B".

para apuntar el elemento de CSS, se puede escapar de esta manera:

<style> 
    #A\ B { 
    background: hotpink; 
    } 
</style> 
+0

En caso de que alguien se pregunte, esto también funciona con Capybara cuando se trata de seleccionar una identificación con un espacio. –

1
 
ID tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). 

Esa cita se tira de otro stackoverflow respuesta: jquery IDs with spaces

9

Ni HTML 4, ni HTML5 permite caracteres de espacio en valores de atributos de ID.

El HTML 4.01 estados de especificaciones que tokens identificación deben comenzar con una letra ([A-Za-z]) y puede ser seguido por cualquier número de letras, dígitos ([0-9]), guiones (-), guiones bajos (_), dos puntos (:) y puntos (.). Para el atributo de clase, no existe tal limitación. Los nombres de clase pueden contener cualquier carácter, y no tienen que comenzar con una letra a ser válidos.

HTML5 elimina las restricciones adicionales en el atributo id. Los únicos requisitos que quedan, además de ser únicos en el documento, son que el valor debe contener al menos un carácter (no puede estar vacío), y que no puede contener ningún espacio en blanco.

Fuente:

http://mathiasbynens.be/notes/html5-id-class

+0

+1 Esto es correcto.Sin embargo, aunque técnicamente no es válido tener un espacio en un valor de atributo de ID en HTML, [puede hacer que funcione si escapa de su selector jQuery correctamente] (http://stackoverflow.com/questions/6802765/jquery-dealing-with -a-space-in-the-id-attribute/7873035 # 7873035). –

9

A medida que se mencionan no se debe utilizar en espacios ID. Pero de todos modos, ¿no estaría funcionando esto para usted?

$("[id='A B']").click(...) 

EDITAR: si funciona, se probaron !!! ¡No me maten, amantes del estándar! ;-P

3

No debe haber espacio en un id, pero esto parece a las obras:

$("[id=A B]") 
+0

parece que lo publicamos al mismo tiempo :) – TMS

Cuestiones relacionadas