Valeur retournée par document.getElementById

Résolu
fpradignac -  
 fpradignac -
Bonjour à toutes et tous,

j'utilise un bout de script pour faire clignoter un texte dont l'ID est 'blink' :

<script type="text/javascript">
function blink() {
  var toBl = document.getElementById('blink');
  if ( toBl.style.color == 'midnightblue' ) {
    toBl.style.color = 'red';
  } else {
    toBl.style.color = 'midnightblue';
  }
}
setInterval("blink()", 1000);
</script>


Comment connaitre la valeur retournée par :
 toBl.style.color


Ceci parce que ce script ne fonctionne que dans FF et IE. Opera est plus rebelle, ainsi que le WebKit.
Mon test d'égalité est foireux.
En faisant différents essais, j'en conclue que les différents navigateurs ne retournent pas la même valeur de couleur.
La preuve, Opera exécute le script correctement si je le modifie comme ceci :

function blink() {
  var toBl = document.getElementById('blink');
  if ( toBl.style.color == 'midnightblue' || toBl.style.color == '#191970' ) {
    toBl.style.color = 'red';
  }  else  {
    toBl.style.color = 'midnightblue';
  }
}


Note : la couleur midnightblue = #191970, Opera transforme donc en hexa...

Merci pour votre aide,
françois

6 réponses

fpradignac
 
Voici donc le code qui permet de faire clignoter un élément ayant un ID, et qui fonctionne avec tous les moteurs de rendu Gecko (Firefox & Co), WebKit (Safari, Chrome), Trident (IE) et les OS MacOSX, Linux, Windows™©® :
<script type="text/javascript">
function blink() {
  var toBl=document.getElementById('blink');
//  alert("Code couleur retourne par navigateur: "+toBl.style.color);
  if ( toBl.style.color=='#191970' || toBl.style.color=='rgb(25, 25, 112)' || toBl.style.color=='rgb(25,25,112)' ) {
    toBl.style.color = '#DC143C'; //rouge
  } else {
    toBl.style.color = '#191970'; //bleu
  }
}
setInterval("blink()", 1000);
</script>
1
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
a mon avis il vaut mieux utiliser le code hexa #xxxxxxx pour les couleurs plutôt que le nom que certains navigateurs n'interprètent pas correctement
0
fpradignac
 
Alain,

J'ai bien évidement testé différents codes couleurs, même en rgb(xx,yy,zz) et ceci :
function blink() {
  var toBl=document.getElementById('blink');
  if (toBl.style.color=='#191970') {
    toBl.style.color='crimson';
  } else {
    toBl.style.color='#191970';
  }
}

ne fonctionne qu'avec Opera et IE.

C'est pour cela que pouvoir récupérer la valeur "style.color" retournée par chaque navigateur éclairerait ma lanterne !

Merci,
françois
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
toBl.style.color='crimson';

déja remplace ça par le code couleur hexa correspondant

et pour avoir le code retourné tu mets une petite boite de dialogue JS:


function blink() {
  var toBl=document.getElementById('blink');

alert("Code couleur retourne par navigateur: "+toBl.style.color);

  if (toBl.style.color=='#191970') {
    toBl.style.color='crimson';
  } else {
    toBl.style.color='#191970';
  }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fpradignac
 
Merci Alain,
ce n'est pas si simple : tous les moteurs de rendu savent interpréter les différents codes couleur hexa, littéral ou rgb, donc le passage de la couleur est bien appliqué par les moteurs; par contre ils ne renvoient pas la même valeur avec style.color :
- IE (Trident) = rgb(25,25,122) sans espace
- Opera = en hexa
- Gecko+WebKit = rgb(25, 25, 122) avec espaces
maintenant je vais pouvoir traiter les retours de chaque moteur.

Merci beaucoup Alain pour ton aide !!!
François
0
fpradignac
 
Je viens d'écrire un petit mémo qui reprend les réponses de tous les moteurs de rendu :
https://www.philographie.com?id=70&c=E-JavaScript
0