2009-04-20 28 views
0

我有几个CSS选择器这样的:我怎么能强制Internet Explorer以应用CSS样式

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

然后我为每一个在JavaScript中细胞中将sortOrder扩展属性。但是,在我移动光标之前,浏览器(IE7,也许是其他的)中看不到变化的样式。我如何强制样式重新评估?

编辑:我没有使用原来所说的IE6,但IE7。但问题仍然存在。

回答

2

有各种hack-y方法来强制重新渲染。 script.aculo.us有一个名为forceRerendering(自然)方法,看起来像这样:

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

这应该在这种情况下工作了。

1

IE6不支持属性或子选择器,所以这根本不应该工作。你在使用ie7-js吗?


OK,我现在看到。这看起来像IE中的一个错误(使用divtitle,对于thsortOrder有同样的问题)。

<!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> 

修饰innerHTML的线条似乎解决的bug。虽然在Google上找不到任何引用。

+0

对不起,我是用IE7的。但问题仍然存在 – erikkallen 2009-04-20 11:52:37

0

我有类似的问题:插入新的div后没有应用保证金。
下一个代码帮助:
   的setTimeout(函数(){。newDiv.addClass( 'tratata')removeClass( 'tratata');},0);     // jquery syntax