让IE6支持非a标签的hover属性
来源:互联网 发布:美工强大的手游 编辑:程序博客网 时间:2024/04/28 17:52
自从windows7推出以后,IE9也随之而来,但很多人还是喜欢用旧版本,并且相当一部分个人和企业都在使用IE6,不得不承认IE6是一款很成功的产品,但英雄总有暮年时,该退还得退,世界是在不断的更迭中丰富多彩的。既然有人习惯于旧事物,那么身为一名为人民服务的程序员,就得全心全意为客户。
此处注意引入文件的路径,一般不成功都是由路径问题引起的。添加完这两段代码后,就可以直接在CSS中对div标签使用hover啦。如下:
目前CSS最新版是CSS3,而IE6支持的是CSS1.0,因此IE6不支持CSS中一些新特性。这次项目,要做下拉菜单,IE6不支持非a标签的hover属性,不得不采用HTML组件,虽然效果一般,但能实现功能。自Internet Explorer 5开始微软引入了HTML组件(Html Components)的概念,详见百度百科,HTML组件扩展名是.htc。
想要和其他浏览器一样使用hover的话,首先需要建立一个hover.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>
然后在CSS文件中添加对hover.htc文件的引用,如下:
- div{
- behavior:url(js/hover.htc);
- }
此处注意引入文件的路径,一般不成功都是由路径问题引起的。添加完这两段代码后,就可以直接在CSS中对div标签使用hover啦。如下:
- #menu li:hover div {
- visibility: visible;
- }
- 让IE6支持非a标签的hover属性
- IE6:支持非a标签的hover属性
- 让IE6也支持hover[JS模拟]
- 让IE6支持hover伪类效果
- ie6 a的hover无效
- ie6 a hover 属性失效解决办法
- 关于IE6下a标签的a:hover伪类失效的问题
- IE6不支持非A元素:hover伪类的bug的处理
- IE6中背景属性加a与a:hover问题
- IE6 中 a:hover 的bug
- 让ie6,7,8支持css3的一些属性
- 让IE6 也支持 :hover —— jquery ie-hover 插件
- html5shiv让IE6-IE8支持HTML5标签
- html5shiv让IE6-IE8支持HTML5标签
- 让ie6,7,8支持css3属性
- IE6bug整理(hover a:hover) IE6 a:hover 无效
- A标签的四个属性 link ,visited , hover ,active 原来是有顺序的! LVHA
- CSS笔记-除了a标签外的hover属性的应用
- 在线清除mysql的mysql-bin.000 二进制文件
- SQL Server 查询优化
- ActionMessage、ActionMessages、saveMessages()、saveErrors()、之间的关系及用法
- windows系统查看详细系统信息方法
- C#不同类型的成员变量(字段)的默认值
- 让IE6支持非a标签的hover属性
- java处理字符串搜索嵌套结构的方法
- 一个排序的swf
- 完美实现同时分享图片和文字(Intent.ACTION_SEND)
- Codeforces Beta Round #2 B
- VS快捷键
- java 求签20的阶乘之和
- 推荐18个基于 HTML5 Canvas 开发的图表库
- TW上海元年