D'après ce que je comprends, les spécifications HTML5 vous permettent d'utiliser des identifiants qui sont des nombres comme celui-ci.
<div id="1"></div>
<div id="2"></div>
Je peux accéder à ces bons en utilisant getElementById
mais pas avec querySelector
. Si j'essaye de faire ce qui suit, j'obtiens SyntaxError: DOM Exception 12 dans la console.
document.querySelector("#1")
Je suis juste curieux de savoir pourquoi l'utilisation de nombres comme identifiants ne fonctionne pas querySelector
lorsque la spécification HTML5 indique qu'ils sont valides. J'ai essayé plusieurs navigateurs.
javascript
html
css-selectors
selectors-api
Bleu baie
la source
la source
Réponses:
Il est valide, mais nécessite un traitement spécial. De là: http://mathiasbynens.be/notes/css-escapes
Donc, votre code finirait par (CSS d'abord, JS ensuite):
la source
#\\31 0
- vous pouvez vous référer à mothereffingcssescapes.comParce que bien qu'ils soient valides dans la spécification HTML5, ils ne le sont pas dans CSS, c'est ce que signifie " sélecteur de requête ".
Au lieu de cela, vous devriez faire ceci:, ce
document.querySelector("[id='1']")
qui est très long étant donné que vous pourriez lui donner un identifiant significatif commemessage1
ou quelque chose;)la source
J'avais besoin d'une approche automatisée. Un changement récent signifiait que les valeurs d'identifiant utilisées n'étaient plus de simples caractères alphabétiques et incluaient des nombres et des caractères spéciaux.
J'ai fini par utiliser
CSS.escape
: https://developer.mozilla.org/en-US/docs/Web/API/CSS/escapeTout d'abord, voici le cas défaillant:
Et maintenant en utilisant
CSS.escape
:Voyez comment cela change correctement pour montrer
After
, démontrant que le sélecteur a fonctionné!la source
Depuis la documentation du W3C Syntaxe des sélecteurs d'attributs
Ainsi, les chiffres ou les chaînes alphanumériques avec le premier chiffre ne sont pas considérés comme un identifiant valide.
Si vous utilisez un utilitaire de génération d'ID pour générer un identifiant, vous risquez de vous retrouver avec des identifiants alphanumériques avec des chiffres en tête.
Une solution rapide serait soit d'omettre les chiffres du SEED du générateur (s'il peut être modifié), soit de toujours ajouter une chaîne à l'identifiant généré.
la source
Voici une fonction que j'ai créée tout à l'heure pour traiter les ID de numéro de tête dans les sélecteurs CSS, et elle est sûre pour IE, contrairement à CSS.escape.
Passez le sélecteur à travers cette fonction cleanSelector avant de l'utiliser:
la source