Por lo que tengo entendido, la especificación HTML5 le permite usar ID que son números como este.
<div id="1"></div>
<div id="2"></div>
Puedo acceder a estos bien usando getElementById
pero no con querySelector
. Si intento hacer lo siguiente, obtengo SyntaxError: DOM Exception 12 en la consola.
document.querySelector("#1")
Solo tengo curiosidad por qué el uso de números como ID no funciona querySelector
cuando la especificación HTML5 dice que son válidos. Probé con varios navegadores.
javascript
html
css-selectors
selectors-api
Mora azul
fuente
fuente
Respuestas:
Es válido, pero requiere un manejo especial. Desde aquí: http://mathiasbynens.be/notes/css-escapes
Entonces su código terminaría como (CSS primero, JS segundo):
fuente
#\\31 0
- puede hacer referencia a mothereffingcssescapes.comPorque si bien son válidos en la especificación HTML5, no son válidos en CSS, que es lo que significa " selector de consultas ".
En su lugar, tendría que hacer esto:,
document.querySelector("[id='1']")
que es muy largo considerando que podría darle una identificación significativa comomessage1
o algo así;)fuente
Necesitaba un enfoque automatizado. Un cambio reciente significó que los valores de identificación utilizados ya no eran simples caracteres alfabéticos e incluían números y caracteres especiales.
Terminé usando
CSS.escape
: https://developer.mozilla.org/en-US/docs/Web/API/CSS/escapePrimero, este es el caso fallido:
Y ahora usando
CSS.escape
:¡Vea cómo cambia correctamente para mostrar
After
, demostrando que el selector funcionó!fuente
De la sintaxis de los selectores de atributos de la documentación del W3C
Por tanto, los dígitos o las cadenas alfanuméricas con un dígito inicial no califican como un identificador válido.
Si está utilizando una utilidad generadora de ID para generar un identificador, puede terminar con identificadores alfanuméricos con dígitos iniciales.
Una solución rápida sería omitir dígitos del SEED del generador (si se puede modificar) o agregar siempre una cadena a la identificación generada.
fuente
Aquí hay una función que hice hace un momento para tratar con ID de números principales en los selectores de CSS, y es segura para IE como CSS.escape no lo es.
Pase el selector por esta función cleanSelector antes de usarlo:
fuente