当前位置: 首页 > news >正文

IE6不支持a标签以外元素的hover的解决方案

IE6以及更低版本的浏览器对“:hover”的支持不理想,对于类似的“p:hover”、“img:hover”、“#header:hover”...,今天给大家介绍一种新的方法,可以完美解决IE6不支持hover的情况,用法很简单,将下载后的“csshover.htc”文件,定义在body样式内

  1. body { behavior:url("csshover.htc"); }  /*不管这句样式是定义在外部还是页面中的  url(csshover.htc)中htc文件的路径始终是相对html页面的。 */

csshover.htc:

<attach event="ondocumentready" handler="parseStylesheets"/>
<script language="JScript">
var currentSheet, doc = window.document, activators = {
onhover:{on:'onmouseover', off:'onmouseout'},
onactive:{on:'onmousedown', off:'onmouseup'}
};
function parseStylesheets(){
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(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i).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.*$/, '');
var elements = getElementsBySelect(affected);
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;
node.attachEvent(events.on, function(){
node.className += ' ' + className;
});
node.attachEvent(events.off, function(){
node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),'');
});
};
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 classname = (/\.([a-z0-9_-]+)/i).exec(select);
var identify = (/\#([a-z0-9_-]+)/i).exec(select);
var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');
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((identify && node.id != identify[1]) || (classname && !(new RegExp('\\b' + classname[1] + '\\b').exec(node.className)))) continue;
nodes[nodes.length] = node;
};
};
return nodes;
};
</script> 

 

相关文章:

  • 40个Java多线程问题详解复习
  • 【Linux】目录权限与文件权限
  • YUV数据格式与YUV_420_888
  • vue-cli3.0项目中使用vw——相比flexible更原生的移动端解决方案
  • rsync 数据镜像备份 记录
  • Lucene:基于Java的全文检索引擎简介
  • Android 其他特效展示
  • DataUml Design 教程7 - 数据库生成模型
  • request
  • luanet分布式lua框架
  • 解决 LLVM 错误 fatal error: ‘csignal’ file not found
  • 使用idea 搭建一个 SpringBoot + Mybatis + logback 的maven 项目
  • vmware 安装dos注意
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • Centos6.4_X64飞信安装
  • python3.6+scrapy+mysql 爬虫实战
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【Leetcode】104. 二叉树的最大深度
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • HTML-表单
  • nodejs调试方法
  • scrapy学习之路4(itemloder的使用)
  • SQLServer插入数据
  • Theano - 导数
  • vuex 笔记整理
  • 用mpvue开发微信小程序
  • zabbix3.2监控linux磁盘IO
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​卜东波研究员:高观点下的少儿计算思维
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C#)一个最简单的链表类
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (分布式缓存)Redis哨兵
  • (附源码)ssm高校实验室 毕业设计 800008
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (四)汇编语言——简单程序
  • (一)Thymeleaf用法——Thymeleaf简介
  • (译) 函数式 JS #1:简介
  • (转)ORM
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .dwp和.webpart的区别
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net FrameWork简介,数组,枚举
  • .Net MVC + EF搭建学生管理系统
  • .net MVC中使用angularJs刷新页面数据列表
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET处理HTTP请求
  • .NET单元测试