让IE6、IE7支持querySelectorAll和querySelector方法

 querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的。他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素。
目前几乎主流浏览器均支持了他们。包括 IE8(含) 以上版本、 Firefox、 Chrome、Safari、Opera。

 关于querySelector 和 querySelectorAll 方法的使用,请参考各浏览器中querySelector和querySelectorAll的实现差异javascript高级选择器querySelector和querySelectorAll两篇文章。

 怎么让IE6、IE7也支持querySelectorAll和querySelector方法呢,请看下面的代码:

if (!document.querySelectorAll) {
    document.querySelectorAll = function (selector) {
        var doc = document,
            head = doc.documentElement.firstChild,
            styleTag = doc.createElement(‘STYLE‘);
        head.appendChild(styleTag);
        doc.__qsaels = [];

        if (styleTag.styleSheet) {   // for IE
            styleTag.styleSheet.cssText = selector + "{x:expression(document.__qsaels.push(this))}";
        } else {                // others
            var textnode = document.createTextNode(selector + "{x:expression(document.__qsaels.push(this))}");
            styleTag.appendChild(textnode);
        }
        window.scrollBy(0, 0);

        return doc.__qsaels;
    }
}

if (!document.querySelector) {
    document.querySelector = function (selectors) {
        var elements = document.querySelectorAll(selectors);
        return (elements.length) ? elements[0] : null;
    };
}

if (typeof HTMLElement != "undefined") {
    HTMLElement.prototype.querySelector = document.querySelector;
    HTMLElement.prototype.querySelectorAll = document.querySelectorAll;
}
else {
    var a = document.getElementsByTagName("*"), l = a.length, i;
    for (i = 0; i < l; i++) {
        a[i].querySelector = document.querySelector;
        a[i].querySelectorAll = document.querySelectorAll;
    }
}

文件下载:  点击此处下载

文件使用:

  <!--[if lte IE 8]>
  <script type="text/javascript" src="/js/IE6Fix.js"></script>
  <![endif]-->

 参考资料:

  qsa-polyfill-ie7.js
  querySelectorAll shim for non-IE browsers
  querySelector.polyfill.js

时间: 2024-10-03 23:05:37

让IE6、IE7支持querySelectorAll和querySelector方法的相关文章

两种解决IE6不支持固定定位的方法

有两种让IE6支持position:fixed1.用CSS执行表达式 *{margin:0;padding:0;} * html,* html body{ background-image:url(about:blank); background-attachment:fixed; } * html .fixed{ position:absolute; bottom:auto; top:expression(eval(document.documentElement.scrollTop+ doc

DIV CSS兼容性解决IE6/IE7/FF浏览器的通用方法完美兼(转)

在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所有浏览器 通用height: 100px; IE6 专用_height: 100px; IE6 专用*height: 100px; IE7 专用*+height: 100px; IE7.FF 共用height: 100px !important; 一.CSS HACK1, !important随着IE7对!i

IE6不支持first-child的解决方法

乌龙猫网站昨日刚刚上线,后来在IE6下发现侧边栏的智能浮动中,第一个模块的margin-top不为0,这个原本在CSS中已经定义的样式为: HTML: <div class="sidebar_block"></div> CSS: .sidebar_block:first-child { margin:0; } 遇到IE6不支持first-child伪类不是第一次了,平时都是用jquery解决,只要用一句:$(.sidebar_block:first).css()

IE6/IE7浏览器不支持display: inline-block;的解决方法

display: inline-block;在IE6与IE7中存在bug. 1.inline元素的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的display属性设置为inline-block时,IE6/IE7浏览器是不支持的: IE中对内联元素使用display:inline-block,IE是不识别的,但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表征

让IE6/IE7/IE8支持CSS3属性的8种方法介绍

我们都知道,IE浏览器暂不支持CSS3的一些属性.国外的工程师们,不安于此现状,他们总是尽量使用一些手段使IE浏览器也能支持CSS3属性,我觉得这些都是很有意义,很有价值的工作,可以推动整个技术领域的进步的.到目前为止,有不少可以让IE支持部分CSS3属性的工具.例如: 1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js) 这个玩意估计是试图让IE支持CSS3属性的鼻祖,还算蛮强大,就是性能开销较大,要解析很多文件脚本,给DOM添加大量的元素以及ClassName

让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法转

让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法 最近做一个Web网站,之前一直觉得bootstrap非常好,这次使用了bootstrap3,在chrome,firefox,safari,opera,360浏览器(极速模式).搜狗浏览器等浏览器下均没有问题,而在IE8及IE11下发现样式无法显示,然后各种百度啊,最后在 雅朋网 的一个网友帖子的帮助下解决了问题,也参考了 千寻学习网 的资料,先将解决方法总结如下: 首先需要确保你的HTML页面开始部分要有DOC

转载------让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法

本文是转载及收藏 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法 最近做一个Web网站,之前一直觉得bootstrap非常好,这次使用了bootstrap3,在chrome,firefox,safari,opera,360浏览器(极速模式).搜狗浏览器等浏览器下均没有问题,而在IE8及IE11下发现样式无法显示,然后各种百度啊,最后在 雅朋网 的一个网友帖子的帮助下解决了问题,也参考了 千寻学习网 的资料,先将解决方法总结如下: 首先需要确保你的HTML页面

让IE6/IE7/IE8支持HTML5标签的js代码方法

让IE(ie6/ie7/ie8)支持HTML5元素,我们需要在HTML头部添加以下JavaScript,这是一个简单的document.createElement声明,利用条件注释针对IE来调用这个js文件.Opera,FireFox等其他非IE浏览器就会忽视这段代码,也不会存在http请求. 方式一:引用google的html5.js文件,代码内容可以自己下载下来看. <!–[if lt IE9]> <script src="http://html5shiv.googleco

完美解决IE5,IE6,IE7,IE8不支持html5标签的方法

HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. HTML5的新标签元素有: <header>定义页面或区段的头部: <footer>定义页面或区段的尾部: <nav>定义页面或区段的导航区域: <section>页面的逻辑区域或内容组合: <article>定义正文或一篇完整的内容: <aside>定义补充或相关内容: 使用他们能让代码