Sélecteurs d'attributs, JavaScript et IE8

Je tente d'utiliser les sélecteurs d'attributs et les CSS pour les éléments de mise en forme.

Le HTML ressemble à:

<div id="user" highlight="false">User Name</div> 

Le CSS est:

 [highlight=true] { background-color: red; } [highlight=false] { background-color: white; } 

Et puis il y a des JavaScript accompagnant:

 if( foo ) { node.setAttribute('highlight', true); } else { node.setAttribute('highlight', false); } 

Cela fonctionne dans Firefox et Chrome. Lorsque l'attribut de surbrillance est modifié par le JavaScript, la couleur d'arrière-plan de l'élément change selon le cas. Dans IE8, cependant, c'est une histoire différente. L'élément s'affiche correctement en fonction de la valeur de surbrillance qui est initialement attribuée dans le code HTML, mais lorsque l'attribut est modifié dynamiquement, l'affichage de l'élément ne change pas.

Est-ce une quirk connue, et il y a un travail connu?

Mise à jour Je viens de changer le nom de l'attribut en "frob" avec les valeurs "on" et "off". Cela devrait régler toute question relative aux valeurs réservées ou interprétables.

Une autre chose à noter. Lorsque j'ouvre les outils de développement IE8 et que j'utilise l'inspecteur HTML, il affichera le style [frob = on] ou [frob = off] comme appliqué pour la valeur que frob avait eu lorsque j'ai commencé l'inspecteur des documents. Toutefois, l'attribut frob ne changera plus dans la vue de l'inspecteur. En aucun cas, les valeurs du [frob = on / off] css ne sont appliquées après le rendu initial du HTML.

Mise à jour: problème résolu La solution consiste à forcer un redessin. Il existe plusieurs façons de le faire, mais il semble que la norme soit de réaffecter le nom de classe à lui-même.

Vous utilisez le hightlight attribut inconnu. C'est IE afin qu'il supporte les attributs selon son nom (ce qui semble être plus difficile que le support de chaque nom d'attribut, mais … c'est IE).

Il suffit d'utiliser class="hightlight" – plus facile à mettre en œuvre et à gérer.

Vous définissez l'attribut sur JavaScript comme true et false , pas de chaîne "true" et "false" . Cela pourrait être interprété par le navigateur comme 1 et 0 et conduire à des résultats indésirables.

Peux-tu essayer

 node.setAttribute('highlight', 'true'); 

?

Pour éviter les problèmes de compatibilité cross-browser inévitable avec javascript / css, je vous recommande d'utiliser jQuery .

Par exemple, pour mettre en surbrillance un élément via le framework jQuery, c'est tout ce qu'il faut …

 $("div").click(function () { $(this).effect("highlight", {}, 3000); }); 

Assurez-vous que DOCTYPE est défini en haut de la page: Sélecteur d'attribut Css pour type d'entrée = "bouton" ne fonctionne pas sur IE7

Assurez-vous d'avoir un DOCTYPE défini en haut de votre page: Sélecteur d'attributs Css pour type d'entrée = "bouton" ne fonctionne pas sur IE7