iehover-fix.js
上传用户:zhihaomold
上传日期:2007-04-17
资源大小:43041k
文件大小:4k
源码类别:

其他

开发平台:

Objective-C

  1. // Created a long, long time ago by Tanny O'Haley
  2. // Update history.
  3. // 24 Oct 2006 - Added to http://tanny.ica.com
  4. // 14 Jul 2006 - Modified the way the iframe is added to the DOM. I no longer use 
  5. // innerHTML but use DOM methods.
  6. // 15 Sep 2006 - Added a check to see if the target element onmouseout is contained
  7. // in the onmouseout element. If it is then I dont' remove the
  8. // sfhover class. I made use of the Microsoft proprietary
  9. // obj.contains() method.
  10. //  Added check to make sure that the sfhover class is not already in
  11. // the li element.
  12. //
  13. if (navigator.appVersion.substr(23,3) !="7.0") {
  14. sfHover = function() {
  15. var sfEls = document.getElementsByTagName("LI");
  16. for (var i=0; i<sfEls.length; i++) {
  17. sfEls[i].onmouseover=function() {
  18. this.className+=" sfhover";
  19. }
  20. sfEls[i].onmouseout=function() {
  21. this.className=this.className.replace(new RegExp(" sfhover\b"), "");
  22. }
  23. }
  24. }
  25. if (window.attachEvent) window.attachEvent("onload", sfHover);
  26. } else {
  27. sfHover = function() {
  28. // Support the standard nav without a class of nav.
  29. var el = document.getElementById("hdrnav");
  30. if(!/bnavb/.test(el.className) && el.tagName == "UL")
  31. setHover(el);
  32. // Find all unordered lists.
  33. var ieNavs = document.getElementsByTagName('ul');
  34. for(i=0; i<ieNavs.length; i++) {
  35. var ul = ieNavs[i];
  36. // If they have a class of nav add the menu hover.
  37. if(/bnavb/.test(ul.className))
  38. setHover(ul);
  39. }
  40. }
  41. function setHover(nav) {
  42. var ieULs = nav.getElementsByTagName('ul');
  43. if (navigator.appVersion.substr(22,3)!="5.0") {
  44. // IE script to cover <select> elements with <iframe>s
  45. for (j=0; j<ieULs.length; j++) {
  46. var ieMat=document.createElement('iframe');
  47. if(document.location.protocol == "https:")
  48. ieMat.src="//0";
  49. else if(window.opera != "undefined")
  50. ieMat.src="";
  51. else
  52. ieMat.src="javascript:false";
  53. ieMat.scrolling="no";
  54. ieMat.frameBorder="0";
  55. ieMat.style.width=ieULs[j].offsetWidth+"px";
  56. ieMat.style.height=ieULs[j].offsetHeight+"px";
  57. ieMat.style.zIndex="-1";
  58. ieULs[j].insertBefore(ieMat, ieULs[j].childNodes[0]);
  59. ieULs[j].style.zIndex="101";
  60. }
  61. // IE script to change class on mouseover
  62. var ieLIs = nav.getElementsByTagName('li');
  63. for (var i=0; i<ieLIs.length; i++) if (ieLIs[i]) {
  64. // Add a sfhover class to the li.
  65. ieLIs[i].onmouseover=function() {
  66. if(!/bsfhoverb/.test(this.className))
  67. this.className+=" sfhover";
  68. }
  69. ieLIs[i].onmouseout=function() {
  70. if(!this.contains(event.toElement))
  71. this.className=this.className.replace(' sfhover', '');
  72. }
  73. }
  74. } else {
  75. // IE 5.0 doesn't support iframes so hide the select statements on hover and show on mouse out.
  76. // IE script to change class on mouseover
  77. var ieLIs = document.getElementById('nav').getElementsByTagName('li');
  78. for (var i=0; i<ieLIs.length; i++) if (ieLIs[i]) {
  79. ieLIs[i].onmouseover=function() {this.className+=" sfhover";hideSelects();}
  80. ieLIs[i].onmouseout=function() {this.className=this.className.replace(' sfhover', '');showSelects()}
  81. }
  82. }
  83. }
  84. // If IE 5.0 hide and show the select statements.
  85. function hideSelects(){
  86. var oSelects=document.getElementsByTagName("select");
  87. for(var i=0;i<oSelects.length;i++)
  88. oSelects[i].className+=" hide";
  89. }
  90. function showSelects(){
  91. var oSelects=document.getElementsByTagName("select");
  92. for(var i=0;i<oSelects.length;i++)
  93. oSelects[i].className=oSelects[i].className.replace(" hide","");
  94. }
  95. // Run this only for IE.
  96. if (window.attachEvent) window.attachEvent('onload', sfHover);
  97. }
  98. // end