stuHover = function() {
var cssRule;
var newSelector;
for (var i = 0; i < document.styleSheets.length; i++)
for (var x = 0; x < document.styleSheets[i].rules.length ; x++)
{
cssRule = document.styleSheets[i].rules[x];
if (cssRule.selectorText.indexOf("LI:hover") != -1)
{
newSelector = cssRule.selectorText.replace(/LI:hover/gi, "LI.iehover");
document.styleSheets[i].addRule(newSelector , cssRule.style.cssText);
}
}
var getElm = document.getElementById("nav").getElementsByTagName("LI");
for (var i=0; i<getElm.length; i++) {
getElm[i].onmouseover=function() {
this.className+=" iehover";
}
getElm[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" iehover\\b"), "");
}
}
}
if (window.attachEvent) window.attachEvent("onload", stuHover);
以上这个函数可以实现IE6-IE7下将css的li:hover起作用,我也用了很多年了,但是今天遇到一个很奇怪的问题,就是怎么也不起作用了。
今天一整天的排查,问题出在一个css伪类的定义上,其中有一行是
#nav li:hover a.top1_link span.down {}
结果发现,把它删除后是可以起作用的,诡异吧?
后来就逐行逐字的看了这个js函数(因为正常用了很多年,所以不曾怀疑过),发现if (cssRule.selectorText.indexOf("LI:hover") != -1)这一句有些问题:当{}里什么内容都没有的时候就会报错(平时我从来不定义没意义的css,这次是替小师弟排查问题的)。
现在只要改为如下就没问题了:
if ((cssRule.style.cssText.length>0) && (cssRule.selectorText.indexOf("LI:hover") != -1))
自此,问题解决了。
[责任编辑:jumbot]