`

现代浏览器中内置的可以等效替代jQuery的功能

阅读更多

jQuery的体积在不断的增大。新功能要不断增加,这是必然结果。虽然从版本1.8.3开始的瘦身效果明显,但不可否认的是,对于移动手机端的网 页开发,它仍然是不可接受的。当然,jQuery不是铁板一块,你可以对它进行定制,只打包进你想要的组件,但其中的一些用来兼容老式浏览器的代码你无法 去除。

就我的个人习惯来说,不管开发什么项目,即使是一个很简单的demo,我做的第一件事就是引入jQuery,这样做主要是想使用它提 供的DOM选择器功能。对于一些像IE6/IE7这样的老式浏览器,这种做法是显而易见的,但是,如今现代浏览器里已经内置了完整的DOM选择器功能,能 让你使用原生的浏览器提供的方法来实现jQuery的功能。分享一个最好用的UI前端框架!

document.queryselector

这里说的现代浏览器是指火狐、谷歌、Opera、Safri等新生代浏览器,如果是IE,你需要至少是IE8或以上。你可以简单的将document.querySelector()函数映射为$,它能返回在DOM中找到的第一个匹配选择条件的元素。任何的CSS选择符都可以作为它的参数。

注意:IE 8只支持 CSS2.1标准的选择器

.代码 
  1. <div class="container">  
  2.   <ul>  
  3.     <li id="pink">Pink</li>  
  4.     <li id="salmon">Salmon</li>  
  5.     <li id="blue">Blue</li>  
  6.     <li id="green">Green</li>  
  7.     <li id="red">Red</li>  
  8.   </ul>   
  9. </div>  
  10. <script>  
  11.   // 创建全局的 '$' 变量  
  12.   window.$ = function(selector) {  
  13.     return document.querySelector(selector);  
  14.   };  
  15.   (function() {  
  16.     // 通过id查找item1,将它的背景颜色修改为浅红  
  17.     var item = $("#salmon").style.backgroundColor="salmon";  
  18.     console.log(item);  
  19.   }());   
  20. </script>  

 

你需要使用原生的“style”方法,而且这里不能使用jQuery里的链式调用。console.log()输出的将会是backgroundColor方法返回的“salmon”。

原生DOM节点有时候会比封装后的jQuery对象更好用。例如,如果你想修改一个图片的src属性,比较一下下面使用jQuery的做法和直接使用DOM节点的做法。 分享一个最好用的UI前端框架!

.代码 
  1. // jQuery方式  
  2. $("#picture").attr("src""http://placekitten.com/200/200");  
  3. //使用将querySelector映射为$的原生js方式  
  4. $("#picture").src = "http://placekitten.com/200/200";  

 

DOM对象能让你直接访问图片的src属性,相反,所有的jQuery对象都需要你通过attr函数来操作。document.querySelector方法只返回一个元素。如果你的选择目标是一堆元素,它只会返回符合条件的第一个节点。要想返回所有节点,你需要使用document.querySelectorAll方法。

document.queryselectorall

一 个很巧妙的做法是将querySelector映射为$,而将querySelectorAll函数映射为$$。但它返回的是一个节点列表,不如 jQuery里返回的Array格式好用,我们可以使用Array.prototype.slice.call(nodeList)方法加工一下,让它更 方便。

.代码 
  1. <div class="container">  
  2.   <ul>  
  3.     <li id="pink">Pink</li>  
  4.     <li id="salmon">Salmon</li>  
  5.     <li id="blue">Blue</li>  
  6.     <li id="green">Green</li>  
  7.     <li id="red">Red</li>  
  8.   </ul>   
  9. </div>  
  10. <script>  
  11.   window.$ = function(selector) {  
  12.     return document.querySelector(selector);  
  13.   };  
  14.   window.$$ = function(selector) {  
  15.     var items = {},  
  16.     results = [],  
  17.     length = 0,  
  18.     i = 0;  
  19.     // 注意,IE8不支持这种做法  
  20.     results = Array.prototype.slice.call(document.querySelectorAll(selector));  
  21.     length = results.length;  
  22.     // add the results to the items object  
  23.     for ( ; i < length; ) {  
  24.       items[i] = results[i];  
  25.       i++;  
  26.     }  
  27.     // 添加一些额外的属性,让它更像一个Array  
  28.     items.length = length;  
  29.     items.splice = [].splice();  
  30.     // 添加 'each' 方法  
  31.     items.each = function(callback) {  
  32.       var i = 0;  
  33.       for ( ; i < length; ) {  
  34.         callback.call(items[i]);  
  35.         i++;  
  36.       }  
  37.     }  
  38.     return items;  
  39.   };  
  40.   (function() {  
  41.     // 查找green项,修改字体大小  
  42.     $("#green").style.fontSize = "2em";  
  43.     // 通过id查找,修改背景色  
  44.     $$("li").each(function() {  
  45.       this.style.backgroundColor = this.id;  
  46.     });  
  47.   }());  
  48. </script>  

 

注意,IE8是不支持将一个nodeList转换为Array的。

classList

使用jQuery对CSS类操作十分方便,幸运的是,现代浏览器里也内置了一下方法能够很方便的操作它们,主要用到了classList对象。下面是一些基本操作两种方式的对比。 分享一个最好用的UI前端框架!

.代码 
  1. window.$ = function(selector) {  
  2.   return document.querySelector(selector);  
  3. };  
  4. //----增加CSS类------  
  5. /* jQuery */  
  6. $(".main-content").addClass("someClass");  
  7. /* 等效内置方法 */  
  8. $(".main-content").classList.add("someClass");  
  9. //----删除一个CSS类-----  
  10. /* jQuery */  
  11. $(".main-content").removeClass("someClass");  
  12. /* 等效内置方法 */  
  13. $(".main-content").classList.remove("someClass");  
  14. //----判断是否存在一个CSS类---  
  15. /* jQuery */  
  16. if($(".main-content").hasClass("someClass"))  
  17. /* 等效内置方法 */  
  18. if($(".main-content").classList.contains("someClass"))  

 

相对于jQuery提供大量丰富的方法,上面说的这几个现代浏览器里内置的功能显得很简单,但如果项目中的要求不高,这些替代方法能大大的减少你的应用依赖。

最后要提醒的是,这些内置方法在不同的浏览器和不同的版本中支持程度不一样,下面是它们的支持程度参考表。分享一个最好用的UI前端框架!

附图1:各种浏览器对querySelector/querySelectorAll的兼容支持

各种浏览器对querySelector/querySelectorAll的兼容支持

附图1:各种浏览器对classlist的兼容支持

各种浏览器对classlist的兼容支持

0
0
分享到:
评论

相关推荐

    剖析方法本质,促进深度学习——以一道“等效替代法”测电阻的习题教学为例.pdf

    本文通过一道初三电学中使用等效替代法测量电阻的习题教学实例,探讨了如何通过剖析物理思维方法的本质来促进学生的深度学习。文章中提到的教学方法强调了物理教学中的思维活动过程,包括猜想、模仿、质疑、推理、...

    等效替代法测电阻.doc

    等效替代法是一种在电路分析和测量中常用的技术,它基于电路元件的“等效”概念,即一个元件可以用另一个元件来替代,如果这两个元件在特定电路中具有相同的效果。在测量电阻时,等效替代法能帮助我们确定未知电阻的...

    jquery-param:与jQuery.param等效的功能

    jQuery参数产品特点等效于jQuery.param(基于jQuery 3.x) 没有依赖关系通用(同构) ES模块支持安装Node.js: npm install jquery-param --save 浏览器: &lt; script src =" /path/to/jquery-param.min.js " &gt; ...

    力的等效和替代.doc

    3. **力的等效替代**:如果一个力的作用效果与多个力的合力相同,那么这个力可以替代那些力,这就是力的等效性。等效力可以代替原来的所有分力,简化分析和计算。在实验中,我们通常使用平行四边形法则来确定合力的...

    轨道交通设备中FPGA芯片等效性验证方法.pdf

    在FPGA开发流程中,寄存器传输级(RTL)的行为描述逻辑功能可以通过前仿真得到验证。然而,综合器在进行结构描述的同时,会采用优化算法如组合逻辑削减、状态机重编码、寄存器合并或复制等,这些操作可能导致综合后...

    等效介质理论参数提取代码_等效介电常数_等效参数_等效介质_磁导率_s参数提取_

    在等效介质理论中,复杂的结构可以被一个具有特定等效介电常数的简单介质所代替,以便于分析和设计。等效介电常数的计算通常涉及到对结构电磁响应的建模和逆向工程。 2. **等效参数**:在处理复杂系统时,我们常常...

    第 7 章 jQuery 基础.pptx

    jQuery 程序中不管是页面元素的选择、内置的功能函数,都是美元符号“$”来起始的。而这个“$”就是 jQuery 当中最重要且独有的对象。 ### jQuery 工厂函数 $() 等效于 jQuery(),称为 jQuery 工厂函数,它是 ...

    齐纳二极管的替代;等效大功率齐纳二极管

    齐纳二极管,也称为稳压二极管,是一种特殊类型的二极管,其主要功能是在反向偏置状态下工作,提供稳定的电压基准。在某些应用中,齐纳二极管可能无法满足高功率需求或者无法提供所需的确切电压值。在这种情况下,...

    高考化学等效氢经典例题.docx

    等效氢是指在同一个分子中,具有相同反应活性的氢原子。等效氢的存在使得同分异构体的计算变得复杂。为了解决这个问题,需要掌握对称面分析和换元法等方法。 在计算同分异构体时,需要首先判断对称面,然后看是否有...

    映射到Chrome:将基于Chromium的浏览器版本映射到等效的Chrome版本

    该软件包将这些浏览器的版本映射到其等效的Chrome / Chromium版本,以便在与Browserslist-GA之类的工具一起使用时可以对其进行跟踪。 它是如何工作的 让我们以Yandex浏览器(或YaBrowser)为例,它是俄语国家/地区...

    等效量规和等效定理

    在现代物理学的研究中,等效量规和等效定理是量子场论和粒子物理中非常重要的概念。等效量规特指在量子场论中某些规范场的等效描述,而等效定理则是关于这些规范场与其它物理量在特定极限下的等价性陈述。Andrea ...

    等效源法,等效源法近场声全息,matlab

    等效源法是一种在声学领域中用于重构声场的重要技术,特别是在近场声全息领域,它具有广泛的应用。近场声全息是通过测量声压或粒子速度分布来重建整个声场的一种方法,这对于声学测试、噪声控制以及声学成像等领域...

    jQuery函数的等价原生函数代码示例

    - jQuery中的`$("div")`可以使用原生的`document.getElementsByTagName("div")`替代。 - `$(".my-class")`可以使用`document.querySelectorAll(".my-class")`替代,或者更快的`document.getElementsByClassName(...

    eslint-plugin-jquery:禁止使用本机等效项的jQuery函数

    禁止将jQuery函数与本机等效项一起使用。 安装 您首先需要安装 : $ npm install eslint --save-dev 接下来,安装eslint-plugin-jquery : $ npm install eslint-plugin-jquery --save-dev 注意:如果全局安装了...

    jQuey2018.pdf

    5. 链式操作方式:在jQuery中,可以在一个对象上连续进行多次操作,形成一个操作链。这种方式大大提高了代码的可读性和编写效率。 6. 完善的文档:作为开源项目,jQuery拥有详尽的文档,为开发者提供了大量学习资源...

    从Go到JavaScript的编译器,用于在浏览器中运行Go代码.zip

    GopherJS是这样一个编译器,它将Go源代码转换为等效的JavaScript代码,这样就可以在浏览器的JavaScript引擎上运行。GopherJS保留了Go语言的语法和结构,使得熟悉Go的开发者能够轻松地编写前端代码。它实现了Go的标准...

    半圆拱形巷道中电磁波传播的等效分析方法

    采用等效分析方法,利用矩形巷道最低衰减模式等效半圆拱形巷道中的最低衰减模式,可以近似分析半圆拱形巷道中电磁波衰减率的情况。等效结果表明,对于较大尺寸的半圆拱形巷道,使用等面积等形状因子的矩形巷道等效效果...

Global site tag (gtag.js) - Google Analytics