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

IE6、IE7兼容querySelectorAll和querySelector方法-最终版本

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

 querySelector 和 querySelectorAll 方法很好用,可惜IE6、IE7不支持,怎么让IE6、IE7也支持querySelectorAll和querySelector这两个方法呢,请看下面的代码:

if (!document.querySelectorAll) {
    document.querySelectorAll = function (selectors) {
        var style = document.createElement('style'), elements = [], element;
        document.documentElement.firstChild.appendChild(style);
        document._qsa = [];

        style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';
        window.scrollBy(0, 0);
        style.parentNode.removeChild(style);

        while (document._qsa.length) {
            element = document._qsa.shift();
            element.style.removeAttribute('x-qsa');
            elements.push(element);
        }
        document._qsa = null;
        return elements;
    };
}

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

// 用于在IE6和IE7浏览器中,支持Element.querySelectorAll方法
var qsaWorker = (function () {
    var idAllocator = 10000;

    function qsaWorkerShim(element, selector) {
        var needsID = element.id === "";
        if (needsID) {
            ++idAllocator;
            element.id = "__qsa" + idAllocator;
        }
        try {
            return document.querySelectorAll("#" + element.id + " " + selector);
        }
        finally {
            if (needsID) {
                element.id = "";
            }
        }
    }

    function qsaWorkerWrap(element, selector) {
        return element.querySelectorAll(selector);
    }

    // Return the one this browser wants to use
    return document.createElement('div').querySelectorAll ? qsaWorkerWrap : qsaWorkerShim;
})();

 

 参考资料:

  qsa-polyfill-ie7.js
  How to add querySelectorAll() function to Element for IE <= 7?
  querySelector.polyfill.js

转载于:https://www.cnblogs.com/jacktang/p/4253249.html

相关文章:

  • 【Linux】Shell批量修改文件名
  • MySQL 查询当天、本周,本月、上一个月的数据
  • NHibernate3.2+Asp.net MVC3+Extjs 4.0.2项目实践(五):Extjs树形导航菜单
  • 利用指针间隔的输出字符串中的字符
  • Java中Httpsession是如何实现的?
  • 《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器
  • 洛谷 P1616 疯狂的采药
  • 【BW系列】SAP 讲讲BW/4 HANA和BW on HANA的区别
  • Shell的一些基本概念
  • 剑指Offer——二叉搜索树的第K个节点
  • python 排序 桶排序
  • ubuntu之路——day7.2 regularization
  • 查看mysql数据库大小
  • Java程序员编程性能优化必备的34个小技巧
  • HTTP/1.1-HTTP/2.0-HTTP/3.0-HTTPS
  • 【Amaple教程】5. 插件
  • CSS居中完全指南——构建CSS居中决策树
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES6核心特性
  • github从入门到放弃(1)
  • hadoop集群管理系统搭建规划说明
  • httpie使用详解
  • IndexedDB
  • React 快速上手 - 07 前端路由 react-router
  • Redash本地开发环境搭建
  • sessionStorage和localStorage
  • spark本地环境的搭建到运行第一个spark程序
  • spring boot下thymeleaf全局静态变量配置
  • Vue UI框架库开发介绍
  • vue 配置sass、scss全局变量
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 安卓应用性能调试和优化经验分享
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 大整数乘法-表格法
  • 缓存与缓冲
  • 将回调地狱按在地上摩擦的Promise
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 设计模式走一遍---观察者模式
  • 手写双向链表LinkedList的几个常用功能
  • 提醒我喝水chrome插件开发指南
  • 系统认识JavaScript正则表达式
  • 写给高年级小学生看的《Bash 指南》
  • 正则表达式
  • MPAndroidChart 教程:Y轴 YAxis
  • PostgreSQL之连接数修改
  • 如何用纯 CSS 创作一个货车 loader
  • ​520就是要宠粉,你的心头书我买单
  • ​io --- 处理流的核心工具​
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​Python 3 新特性:类型注解
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (145)光线追踪距离场柔和阴影