2012-03-29 18 views
104

Duplicar posible:
How to select html nodes by ID with jquery when the id contains a dot?jQuery dot en el selector de ID?

Tengo un sitio web que contiene elementos similares a esta:

<p id="root.SomeCoolThing">Some Cool Thing</p> 

no puedo seleccionar el párrafo con jQuery como $('#root.SomeCoolThing') porque jQuery piensa, SomeCoolThing es la clase de un elemento con id="root".

¿Cómo puedo seleccionar este elemento con jQuery? Me gustaría evitar una construcción como esta:

$(document.getElementById('root.SomeCoolThing')) 
+0

http://stackoverflow.com/questions/605630/how-to-select-html-nodes-by-id-with-jquery-when-the-id-contains-a-dot – David

+0

Aunque hay es una solución con doble '\\\'. ¿Por qué poner un punto dentro de la identificación? – gdoron

+0

Bueno, el sitio web no está hecho de mí. No me gustan los nombres de identificación tampoco. Es, más precisamente, una documentación API. –

Respuesta

194

utilizar las reglas que escapan de la jQuery selectors API de la siguiente manera:

$('#root\\.SomeCoolThing') 

Desde el docs:

Para utilizar cualquiera de los metacaracteres (como !"#$%&'()*+,./:;<=>[email protected][\]^`{|}~) como una parte literal de un nombre, debe se escapó con dos barras diagonales inversas: \\. Por ejemplo, un elemento con id="foo.bar", puede usar el selector $("#foo\\.bar").

+1

Ah, ya veo. Intenté usar una sola barra invertida que no funcionó. ¡Gracias! –

+0

Probé $ ('# root \\. SomeCoolThing'), funciona. Pero cuando pruebo $ ("# root \\. SomeCoolThing") con comillas dobles, no funcionó. ¿Tiene alguna idea sobre la diferencia entre comillas simples y comillas dobles en jQuery? –

+0

@keweishang quotes tipo no debería marcar la diferencia, siempre y cuando sean los mismos – charlietfl

3

disparar sin apuntar aquí, pero si no se puede cambiar el ID del elemento, intente utilizar este selector:

$("p[id=root.SomeCoolThing]") 
29

Uso de trabajos attr:

$('p[id="root.SomeCoolThing"]') 
+2

'One-liners' a veces no son lo suficientemente útiles. Explica tu razonamiento más allá de una simple declaración ... – nickhar

+2

Esto también es un gran procesamiento adicional en la parte de jQuery que no es necesario, donde todo lo que necesitas hacer es escapar del "." personaje ... – Ian

+5

@Ian. Es útil cuando no conoces la identificación de antemano. Podría ser una variable que obtienes de un objeto json. –

3

usar dos barras invertidas antes de cada carácter especial

$('#root\\.SomeCoolThing') 
14

tiene que escapar caracteres especiales:

$('#root\\.SomeCoolThing') 

docs:

Si desea utilizar cualquiera de los metacaracteres (como ! "# $% & '() * +,./:; < =>? @ []^`{|} ~) como parte literal de un nombre, debe escapar del caracter con dos barras diagonales inversas: \\. Por ejemplo, si tiene un elemento con id = "foo.bar",, puede usar el selector $ ("# foo \\. Barra").

Cuestiones relacionadas