`
webcode
  • 浏览: 5975326 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

让IE6支持非a标签的hover属性

 
阅读更多
自从windows7推出以后,IE9也随之而来,但很多人还是喜欢用旧版本,并且相当一部分个人和企业都在使用IE6,不得不承认IE6是一款很成功的产品,但英雄总有暮年时,该退还得退,世界是在不断的更迭中丰富多彩的。既然有人习惯于旧事物,那么身为一名为人民服务的程序员,就得全心全意为客户。

目前CSS最新版是CSS3,而IE6支持的是CSS1.0,因此IE6不支持CSS中一些新特性。这次项目,要做下拉菜单,IE6不支持非a标签的hover属性,不得不采用HTML组件,虽然效果一般,但能实现功能。自Internet Explorer 5开始微软引入了HTML组件(Html Components)的概念,详见百度百科,HTML组件扩展名是.htc。

想要和其他浏览器一样使用hover的话,首先需要建立一个hover.htc的文件,将如下代码拷贝进去。

[javascript] view plaincopy
  1. <attachevent="ondocumentready"handler="parseStylesheets"/>
  2. <script>
  3. varcsshoverReg=/(^|\s)(([^a]([^]+)?)|(a([^#.][^]+)+)):(hover|active)/i,
  4. currentSheet,doc=window.document,hoverEvents=[],activators={
  5. onhover:{on:'onmouseover',off:'onmouseout'},
  6. onactive:{on:'onmousedown',off:'onmouseup'}
  7. }
  8. functionparseStylesheets(){
  9. if(!/MSIE(5|6)/.test(navigator.userAgent))return;
  10. window.attachEvent('onunload',unhookHoverEvents);
  11. varsheets=doc.styleSheets,l=sheets.length;
  12. for(vari=0;i<l;i++)
  13. parseStylesheet(sheets[i]);
  14. }
  15. functionparseStylesheet(sheet){
  16. if(sheet.imports){
  17. try{
  18. varimports=sheet.imports,l=imports.length;
  19. for(vari=0;i<l;i++)parseStylesheet(sheet.imports[i]);
  20. }catch(securityException){}
  21. }
  22. try{
  23. varrules=(currentSheet=sheet).rules,l=rules.length;
  24. for(varj=0;j<l;j++)parseCSSRule(rules[j]);
  25. }catch(securityException){}
  26. }
  27. functionparseCSSRule(rule){
  28. varselect=rule.selectorText,style=rule.style.cssText;
  29. if(!csshoverReg.test(select)||!style)return;
  30. varpseudo=select.replace(/[^:]+:([a-z-]+).*/i,'on$1');
  31. varnewSelect=select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi,'.$2'+pseudo);
  32. varclassName=(/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];
  33. varaffected=select.replace(/:(hover|active).*$/,'');
  34. varelements=getElementsBySelect(affected);
  35. if(elements.length==0)return;
  36. currentSheet.addRule(newSelect,style);
  37. for(vari=0;i<elements.length;i++)
  38. newHoverElement(elements[i],className,activators[pseudo]);
  39. }
  40. functionHoverElement(node,className,events){
  41. if(!node.hovers)node.hovers={};
  42. if(node.hovers[className])return;
  43. node.hovers[className]=true;
  44. hookHoverEvent(node,events.on,function(){node.className+=''+className;});
  45. hookHoverEvent(node,events.off,function(){node.className=node.className.replace(newRegExp('\\s+'+className,'g'),'');});
  46. }
  47. functionhookHoverEvent(node,type,handler){
  48. node.attachEvent(type,handler);
  49. hoverEvents[hoverEvents.length]={
  50. node:node,type:type,handler:handler
  51. };
  52. }
  53. functionunhookHoverEvents(){
  54. for(vare,i=0;i<hoverEvents.length;i++){
  55. e=hoverEvents[i];
  56. e.node.detachEvent(e.type,e.handler);
  57. }
  58. }
  59. functiongetElementsBySelect(rule){
  60. varparts,nodes=[doc];
  61. parts=rule.split('');
  62. for(vari=0;i<parts.length;i++){
  63. nodes=getSelectedNodes(parts[i],nodes);
  64. }returnnodes;
  65. }
  66. functiongetSelectedNodes(select,elements){
  67. varresult,node,nodes=[];
  68. varidentify=(/\#([a-z0-9_-]+)/i).exec(select);
  69. if(identify){
  70. varelement=doc.getElementById(identify[1]);
  71. returnelement?[element]:nodes;
  72. }
  73. varclassname=(/\.([a-z0-9_-]+)/i).exec(select);
  74. vartagName=select.replace(/(\.|\#|\:)[a-z0-9_-]+/i,'');
  75. varclassReg=classname?newRegExp('\\b'+classname[1]+'\\b'):false;
  76. for(vari=0;i<elements.length;i++){
  77. result=tagName?elements[i].all.tags(tagName):elements[i].all;
  78. for(varj=0;j<result.length;j++){
  79. node=result[j];
  80. if(classReg&&!classReg.test(node.className))continue;
  81. nodes[nodes.length]=node;
  82. }
  83. }
  84. returnnodes;
  85. }
  86. </script>

然后在CSS文件中添加对hover.htc文件的引用,如下:

  1. div{
  2. behavior:url(js/hover.htc);
  3. }

此处注意引入文件的路径,一般不成功都是由路径问题引起的。添加完这两段代码后,就可以直接在CSS中对div标签使用hover啦。如下:
  1. #menuli:hoverdiv{
  2. visibility:visible;
  3. }

分享到:
评论

相关推荐

    a标签的bug hover状态不触发 可点区域不可点击

    a标签不加href属性a标签:hover状态不触发buga标签可点区域不可点击bug a标签不加href属性 个人觉得都不能称之为bug,但还是拿出来说道说道,因为确实有人这么干,查找问题的时候也花费了点时间。请看demo1 图一 图...

    详解Html a标签中href和onclick用法、区别、优先级别

    如果不设置 href属性在IE6下面会不响应hover。双击后会选中标签的父容器而非这个一a标签(IE下都存在这一问题)。 代码如下  &lt;a&gt; &lt;a&gt; 假定我们有个fn方法,需要取到这个元素,第一个方法传入的this是空值。 所以,...

    46种常见的浏览器兼容性问题大汇总

    6. 模态和非模态窗口问题 3 7. firefox与IE的父元素(parentElement)的区别 3 8. document.formName.item(”itemName”) 问题 3 9. 集合类对象问题 3 10. 自定义属性问题 3 11. input.type属性问题 3 12. event...

    css介绍快速学习

    IE浏览器不支持,在FireFox中可以看到效果。 看显示效果的时候注意,浏览器的缓冲的问题。 a:link {color:blue; text-decoration: none; font-size:12px} a:visited {color:gray; text-decoration: none; font-size:...

    《CSS全程指南》随书光盘

    4.1.3 a:hover 110 4.1.4 a:active 111 4.2 下划线个性化 111 4.3 创建按钮 114 4.3.1 普通按钮式链接 114 4.3.2 3D效果按钮式链接 116 4.4 图片翻转链接 119 4.5 更换链接鼠标指针 122 4.6 小结 124 第5章 列表样式...

    编写高质量代码-Web前端开发修炼之道.azw3

    4.7.11 z-index的相关问题以及Flash和IE 6下的select元素 4.7.12 插入png图片 4.7.13 多版本IE并存方案——CSS的调试利器IETester 第5章 高质量的JavaScript 5.1 养成良好的编程习惯 5.1.1 团队合作——如何...

    关于学习DIV CSS的一些精妙问答

    2.IE6的双倍边距BUG 例如: &lt;style type="text/css"&gt; body {margin:0} div { float:left; margin-left:10px; width:200px; height:200px; border:1px solid red } &lt;/style&gt; 浮动后本来外边距10px,但IE...

    Discuz! X1.5.1 简体GBK R20111221.zip

    FIX 下拉菜单 -&gt; 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...

    Discuz! X1.5.1 繁体BIG5 R20111221.zip

    FIX 下拉菜单 -&gt; 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...

    Discuz! X1.5.1 繁体UTF8 R20111221.zip

    FIX 下拉菜单 -&gt; 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...

    Discuz! X1.5.1 简体UTF-8 R20111221.zip

    FIX 下拉菜单 -&gt; 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...

    jquery插件使用方法大全

    它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX...

    超实用的jQuery代码段

    9.30 用jQuery删除空白标签和具有非中断空格的标签 第10章 jQuery Mobile移动开发技巧 10.1 让页面自适应屏幕宽度 10.2 在移动设备页面中创建多个显示视图 10.3 创建对话框显示效果 10.4 从外部文件中加载页面内容 ...

    禅道项目管理软件开源版5.3正式版本

    1237 任务记录工时的时候在表zt_taskestimate中记录account属性的值 1238 提需求时所属计划列表倒序排序 1240 首页的动态查询逻辑调整 1243 修复框架默认主题pjax的错误 1244 美化邮件提醒的模板 1245 去掉搜索中...

    echarts.min.js

    emphasis: { // 鼠标 hover 高亮时图形和标签的样式 (当鼠标放上去时 label和itemStyle 的样式) label: { // label高亮时的配置 show: true, textStyle: { color: '#fff', // 高亮时标签颜色变为 白色 ...

    Visual C++ 编程资源大全(控件 窗体)

    noform.zip 没有文档类的MDI怎样让MDI程序不需要文档的支持(33KB)&lt;END&gt;&lt;br&gt;98,ROTFONT.zip 用于在窗口中显示任意角度文字的控件(5KB)&lt;END&gt;&lt;br&gt;99,TRAYICON.zip 用于在WIN95的状态栏中显示程序的运行状态(32...

Global site tag (gtag.js) - Google Analytics