J'ai un élément dans le DOM:
<a href="#" data-a="1">Link</a>
Je souhaite obtenir cet élément via son attribut de données personnalisé HTML5 data-a
. Alors j'écris les codes JS:
var a = document.querySelector('a[data-a=1]');
Mais ce code ne fonctionne pas et je reçois une erreur dans la console du navigateur. (J'ai testé Chrome et Firefox.)
Le code JS var a = document.querySelector('a[data-a=a]');
ne provoque pas d'erreur. Je pense donc que le problème est que l'API JS de HTML5 document.querySelector
de HTML5 ne permet pas de rechercher la valeur numérique dans l'attribut de données personnalisées HTML5.
S'agit-il d'un problème de bogue d'implémentation de navigateur ou d'un problème de spécifications HTML5 pertinent pour document.querySelector
?
Ensuite, j'ai testé les codes ci-dessous sur http://validator.w3.org/ :
<!DOCTYPE html>
<meta charset="utf-8">
<title>An HTML Document</title>
<a href="#" data-a="1">Link</a>
Ils sont validés. Depuis ces codes HTML5 sont validés. Nous devrions pouvoir utiliser la JS API document.querySelector
de HTML5 pour rechercher cet élément d'ancrage via son attribut de données personnalisé. Mais le fait est que je reçois une erreur.
La spécification HTML5 pour HTML5 JS API document.querySelector
indique-t-elle que cette méthode ne peut pas rechercher un attribut personnalisé de données HTML5 avec une valeur numérique? (Une source de spécifications HTML5 est recherchée.)
A partir de la spécification des sélecteurs :
Les valeurs d'attribut doivent être des identificateurs CSS ou des chaînes.
Les identifiants ne peuvent pas commencer par un nombre. Les chaînes doivent être citées.
1
n'est donc ni un identifiant valide ni une chaîne.
Utilisez "1"
(qui est une chaîne) à la place.
var a = document.querySelector('a[data-a="1"]');
Vous pourriez utiliser
var a = document.querySelector('a[data-a="1"]');
au lieu de
var a = document.querySelector('a[data-a=1]');
Cela m’a pris un certain temps pour le découvrir, mais si vous avez un nombre stocké dans une variable, dites x et que vous voulez le sélectionner, utilisez
document.querySelector('a[data-a= + CSS.escape(x) + ']').
Ceci est dû à certaines spécifications de nommage d'attributs avec lesquelles je ne suis pas encore très familier. J'espère que cela aidera quelqu'un.