修正一个IE6控制li:hover的js函数

时间:2014-03-29 阅读:
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 , css

 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]

[发表评论] [收藏本页]