首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > CSS >

div:hover在ie6中不兼容有关问题如何解决

2012-05-31 
div:hover在ie6中不兼容问题怎么解决像淘宝网www.taobao.com中分类有服饰、数码、护肤等,当鼠标移上去,div边

div:hover在ie6中不兼容问题怎么解决
像淘宝网www.taobao.com中分类有服饰、数码、护肤等,当鼠标移上去,div边框显示橙色的效果怎么弄出来的,div:hover在ff、ie7、ie8中都能实现,唯独ie6不能兼容div:hover,该怎样解决这个问题使得效果和淘宝网的这个一样在ie6中也可以实现该效果
 


[解决办法]
ie6是css1.0,不支持非a的hover伪类,若想实现hover效果需要写js

将下面代码 写入htc文件中

JScript code
/*解决ie6.0 的hover兼容问题*/<attach event="ondocumentready" handler="parseStylesheets" /><script>var csshoverReg = /(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i,currentSheet, doc = window.document, hoverEvents = [], activators = {    onhover:{on:'onmouseover', off:'onmouseout'},    onactive:{on:'onmousedown', off:'onmouseup'}}function parseStylesheets() {    if(!/MSIE (5|6)/.test(navigator.userAgent)) return;    window.attachEvent('onunload', unhookHoverEvents);    var sheets = doc.styleSheets, l = sheets.length;    for(var i=0; i<l; i++)        parseStylesheet(sheets[i]);}    function parseStylesheet(sheet) {        if(sheet.imports) {            try {                var imports = sheet.imports, l = imports.length;                for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);            } catch(securityException){}        }        try {            var rules = (currentSheet = sheet).rules, l = rules.length;            for(var j=0; j<l; j++) parseCSSRule(rules[j]);        } catch(securityException){}    }    function parseCSSRule(rule) {        var select = rule.selectorText, style = rule.style.cssText;        if(!csshoverReg.test(select) || !style) return;        var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');        var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);        var className = (/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];        var affected = select.replace(/:(hover|active).*$/, '');        var elements = getElementsBySelect(affected);        if(elements.length == 0) return;        currentSheet.addRule(newSelect, style);        for(var i=0; i<elements.length; i++)            new HoverElement(elements[i], className, activators[pseudo]);    }function HoverElement(node, className, events) {    if(!node.hovers) node.hovers = {};    if(node.hovers[className]) return;    node.hovers[className] = true;    hookHoverEvent(node, events.on, function() { node.className += ' ' + className; });    hookHoverEvent(node, events.off, function() { node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),''); });}    function hookHoverEvent(node, type, handler) {        node.attachEvent(type, handler);        hoverEvents[hoverEvents.length] = {            node:node, type:type, handler:handler        };    }    function unhookHoverEvents() {        for(var e,i=0; i<hoverEvents.length; i++) {            e = hoverEvents[i];            e.node.detachEvent(e.type, e.handler);        }    }function getElementsBySelect(rule) {    var parts, nodes = [doc];    parts = rule.split(' ');    for(var i=0; i<parts.length; i++) {        nodes = getSelectedNodes(parts[i], nodes);    }    return nodes;}    function getSelectedNodes(select, elements) {        var result, node, nodes = [];        var identify = (/\#([a-z0-9_-]+)/i).exec(select);        if(identify) {            var element = doc.getElementById(identify[1]);            return element? [element]:nodes;        }               var classname = (/\.([a-z0-9_-]+)/i).exec(select);        var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');        var classReg = classname? new RegExp('\\b' + classname[1] + '\\b'):false;        for(var i=0; i<elements.length; i++) {            result = tagName? elements[i].all.tags(tagName):elements[i].all;            for(var j=0; j<result.length; j++) {                node = result[j];                if(classReg && !classReg.test(node.className)) continue;                nodes[nodes.length] = node;            }        }                  return nodes;    }</script> 


[解决办法]
也可以用jquery写:

HTML code
<div class="test"></div> 

热点排行