Bonsoir à tous
Je suis en train de revoir du code qui date... d'un certain temps.
A cette époque lointaine, on ne pouvait pas utiliser n'importe quoi dans un id, par exemple

<balise id="3Chansons">...</balise>

n'était pas acceptable, un "id" devant être un "identifier", c'est à dire qu'il ne pouvait contenir qu'une lettre suivie de caractères alphanumériques + "_".

Je crois comprendre que cette limitation n'existe plus et qu'on peut mettre à peu près n'importe quoi dans un id -- sauf des espaces -- tant en HTML que dans un fichier XML.
J'utilise le XML tant en JS qu'en PHP, la version de PHP que j'utilise pour le moment pour ce site est 5.6.4.
Pouvez vous confirmer que des id contenant des chemins de fichiers, c'est à dire avec des /, sont corrects tant en HTML qu'en XML, et que pourrai donc les repérer par getElementByID dans ces deux langages ?

Merci de partager vos connaissances.
Bonjour,

D'après ce que je viens de lire, en HTML5, sava, mais pas en HTML 4.01.

Par contre, en CSS, les noms de classes et d'ids ne peuvent pas commencer par un chiffre, sinon, le style est sans effet :

https://www.developpez.net/forums/blogs/471849-muchos/b112/vrai-faux-class-id-ne-doivent-commencer-chiffre/.

Donc, bon, si des ids doivent être ciblés par des styles ou simplement par précaution, vaudrait peut-être mieux pas...

Pour ce qui est d'autres langages, je sais pas.
Merci de ces infos
Je me doutais bien qu'il devait y avoir un zombie...
HTML4 ne me posait pas de problème, mais il y a manifestement des adhérences dans les navigateurs avec l'ancien design.
Ce n'est pas pour autant que je vais changer mon design, il s'agit de XML, pas de HTML, mais je ne suis pas sûr que ça fonctionne. Pas de problème pour faire des tests en PHP, mais je crains que ce soit plus compliqué en JavaScript, il serait bien étonnant que tous les navigateurs soient au niveau dans ce domaine.
Modifié par PapyJP (28 Nov 2018 - 11:08)
Modérateur
C'est pas tout à fait exact, tout cela fonctionne en CSS et en JS, cela demande cependant d'échapper certains caractères. (en JS seulement pour les querySelector, la manipulation de classes par classList n'a pas besoin d'échappement particuliers)

<style>
.? { color: red; }
.\31truc { color: blue; }
.\31 234 { color: green; }
.a\:b { color: yellow; }
</style>
<p class="?">Une note rouge</p>
<p class="1truc">Un truc bleu</p>
<p class="1234">Un machin vert</p>
<p class="a:b">Un bidule jaune</p>

<script>
document.querySelector('.?').textContent = 'Un peu rouge';
document.querySelector('.\\31 234').textContent = 'Un peu vert';
document.querySelector('.a\\:b').textContent = 'Très jaune';
</script>

ps: le ? était un caractère utf-8, mais le forum d'alsacréations ne supporte pas l'unicode, voir ici: https://codepen.io/anon/pen/dQgMjM
Modifié par kustolovic (28 Nov 2018 - 12:10)
Merci de ta réponse
Mon problème est plutôt sur les id.
Est-ce que si j'écris

<p id="3Chansons/Chanson1">Première chanson</p>
<p id="3Chansons/Chanson2">Deuxième chanson</p>
<p id="3Chansons/Chanson3">Troisième chanson</p>

et

var chansonText = "3Chansons/Chanson", chansons = [];
for(var i =1; i < 4; i++) {
   var chanson = document.getElementById(chansonText +i);
  chansons.push(chanson);
}

j'aurai bien le résultat attendu quel que soit le navigateur ?
Modifié par PapyJP (28 Nov 2018 - 17:50)
Modérateur
Oui, si la spec est devenu plus lâche sur ce point, c'est parce que les navigateurs n'en ont jamais rien eu à faire de la limitation. En fait ça fonctionnait déjà (en pratique) en HTML 4, ce n'était juste pas valide.

Sinon de manière absolue, mieux vaut éviter parce que ça peut être embêtant (notament pour les CSS), mais c'est possible.
Meilleure solution
Après, il existe également en jquery/javascript y'a d'autre miracles comme les data-* attribut, où tu peux mettre ce que tu veux.
JENCAL a écrit :
Après, il existe également en jquery/javascript y'a d'autre miracles comme les data-* attribut, où tu peux mettre ce que tu veux.

Merci de ta réponse
Je suis un gros utilisateur des data-*, mais dans ce cas précis il est indispensable d’utiliser les id, ou plus exactement ID.
En effet en PHP on ne peut faire des getElementById pour retrouver rapidement un élément dans un fichier XML. Il faut de plus que le mot clef ID soit écrit en majuscules et que le fichier ait été validé par une DTD. Même si JavaScript est moins exigeant’ je dois faire en sorte que les fichiers XML soient exploitables dans les deux langages.