2009-04-20 4 views
0

J'ai deux ou trois sélecteurs CSS comme ceci:Comment puis-je forcer Internet Explorer pour appliquer des styles CSS

table.SearchCustomerResults > thead > tr > th[sortOrder="0"] {} 
table.SearchCustomerResults > thead > tr > th[sortOrder="1"] {} 

alors je définir l'attribut d'extension sortOrder pour chacune des cellules en JavaScript. Cependant, le style modifié n'est pas visible dans le navigateur (IE7, peut-être autre) jusqu'à ce que je bouge un peu le curseur. Comment puis-je forcer les styles à être réévalués? Editer: Je n'ai pas utilisé IE6 comme indiqué à l'origine, mais IE 7. La question demeure cependant, cependant.

Répondre

2

Il existe différents moyens de hack-y pour forcer le rendu. script.aculo.us a une méthode appelée forceRerendering (naturellement) qui ressemble à ceci:

someElement.appendChild(document.createTextNode(' ')); 
someElement.removeChild(someElement.lastChild); 

Cela devrait fonctionner dans ce cas aussi.

1

IE6 ne prend pas en charge les sélecteurs d'attribut ou d'enfant, cela ne devrait donc pas fonctionner du tout. Utilisez-vous ie7-js?


OK, je vois maintenant. Cela ressemble à un bug dans IE (en utilisant div et title pour th et sortOrder a le même problème).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
    <style> 
     th[sortOrder="0"] {color:red} 
     th[sortOrder="1"] {color:blue} 
    </style> 
    <script> 
     function changeSortOrder() { 
     // swap the orders so that blue is actually red and vice versa 
     document.getElementById("hdr0").setAttribute("sortOrder","1"); 
     document.getElementById("hdr1").setAttribute("sortOrder","0"); 
     //document.getElementById("hdr0").innerHTML += ""; 
     //document.getElementById("hdr1").innerHTML += ""; 
     } 
    </script> 
    </head> 
    <body onload="changeSortOrder()"> 
    <table class="SearchCustomerResults"> 
     <thead><tr> 
     <th sortOrder="0" id="hdr0">red</th> 
     <th sortOrder="1" id="hdr1">blue</th> 
     </tr></thead> 
    </table> 
    </body> 
</html> 

Les lignes qui modifient innerHTML semblent fonctionner autour du bug. Impossible de trouver des références sur Google, cependant.

+0

Désolé, vous avez raison, j'utilisais IE7. La question reste cependant – erikkallen

0

J'ai eu un problème similaire: après avoir inséré un nouveau div IE n'a pas appliqué de marge.
prochain code a aidé:
    setTimeout (function() {. NewDiv.addClass ('tratata') removeClass ('tratata');}, 0);     // syntaxe jquery

Questions connexes