IE6下li:hover不兼容情况测试可以使用

本文介绍了一种使非<a>元素在IE6浏览器中也能使用:hover等伪类的方法。通过创建并引用csshover.htc文件,可以实现对非链接元素如<li>的悬停样式修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过测试可以在IE6下使用

新建文件csshover.htc

需要复制内容如下:

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

测试HTML代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
 </head>
<style>
body
{
/*
首先不支持绝对路径,只支持相对路径。
其次,是相对于当前ASPX网页的相对路径,和CSS文件的位置无关。 (这句话是什么意思我没懂,不过写上供懂的朋友研究。)*/ 
behavior: url(csshover.htc) /*可在IE6,7中对非<a>元素使用hover等伪类(路径要写对哦~要不然没效果的。)*/ 
}
li:hover{color:red;}
</style>
 <body>
  <ul>
<li>这是测试</li>
  </ul>
 </body>
</html>

转载于:https://www.cnblogs.com/draw-cat/p/3337147.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值