成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

現代瀏覽器中內置的幾個可以等效替代jQuery的功能

開發(fā) 前端
jQuery 的體積在不斷的增大。新功能要不斷增加,這是必然結果。雖然從版本1.8.3開始的瘦身效果明顯,但不可否認的是,對于移動手機端的網頁開發(fā),它仍然是不可接受的。當然,jQuery不是鐵板一塊,你可以對它進行定制,只打包進你想要的組件,但其中的一些用來兼容老式瀏覽器的代碼你無法去除。

[[73544]]

jQuery 的體積在不斷的增大。新功能要不斷增加,這是必然結果。雖然從版本1.8.3開始的瘦身效果明顯,但不可否認的是,對于移動手機端的網頁開發(fā),它仍然是不可接受的。當然,jQuery不是鐵板一塊,你可以對它進行定制,只打包進你想要的組件,但其中的一些用來兼容老式瀏覽器的代碼你無法去除。

就我的個人習慣來說,不管開發(fā)什么項目,即使是一個很簡單的demo,我做的***件事就是引入jQuery,這樣做主要是想使用它提供的DOM選擇器功能。對于一些像IE6/IE7這樣的老式瀏覽器,這種做法是顯而易見的,但是,如今現代瀏覽器里已經內置了完整的DOM選擇器功能,能讓你使用原生的瀏覽器提供的方法來實現jQuery的功能。

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.  
  6.     <li id="blue">Blue</li>  
  7.     <li id="green">Green</li>  
  8.     <li id="red">Red</li>  
  9.   </ul>   
  10.  
  11. </div>  
  12.  
  13. <script>  
  14.  
  15.   // 創(chuàng)建全局的 '$' 變量  
  16.   window.$ = function(selector) {  
  17.     return document.querySelector(selector);  
  18.   };  
  19.  
  20.   (function() {  
  21.     // 通過id查找item1,將它的背景顏色修改為淺紅  
  22.     var item = $("#salmon").style.backgroundColor="salmon";  
  23.     console.log(item);  
  24.   }());    
  25. </script>  

你需要使用原生的“style”方法,而且這里不能使用jQuery里的鏈式調用。console.log()輸出的將會是backgroundColor方法返回的“salmon”。

原生DOM節(jié)點有時候會比封裝后的jQuery對象更好用。例如,如果你想修改一個圖片的src屬性,比較一下下面使用jQuery的做法和直接使用DOM節(jié)點的做法。

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

DOM對象能讓你直接訪問圖片的src屬性,相反,所有的jQuery對象都需要你通過attr函數來操作。

document.querySelector方法只返回一個元素。如果你的選擇目標是一堆元素,它只會返回符合條件的***個節(jié)點。要想返回所有節(jié)點,你需要使用document.querySelectorAll方法。

document.queryselectorall

一個很巧妙的做法是將querySelector映射為$,而將querySelectorAll函數映射為$$。但它返回的是一個節(jié)點列表,不如 jQuery里返回的Array格式好用,我們可以使用Array.prototype.slice.call(nodeList)方法加工一下,讓它更方便。

  1. <div class="container">  
  2.   <ul>  
  3.     <li id="pink">Pink</li>  
  4.  
  5.     <li id="salmon">Salmon</li>  
  6.  
  7.     <li id="blue">Blue</li>  
  8.     <li id="green">Green</li>  
  9.     <li id="red">Red</li>  
  10.  
  11.   </ul>   
  12.  
  13. </div>  
  14.  
  15. <script>  
  16.  
  17.   window.$ = function(selector) {  
  18.     return document.querySelector(selector);  
  19.   };  
  20.  
  21.   window.$$ = function(selector) {  
  22.     var items = {},  
  23.     results = [],  
  24.     length = 0,  
  25.     i = 0;  
  26.  
  27.     // 注意,IE8不支持這種做法  
  28.     results = Array.prototype.slice.call(document.querySelectorAll(selector));  
  29.  
  30.     length = results.length;  
  31.  
  32.     // add the results to the items object  
  33.     for ( ; i < length; ) {  
  34.       items[i] = results[i];  
  35.       i++;  
  36.     }  
  37.  
  38.     // 添加一些額外的屬性,讓它更像一個Array  
  39.     items.length = length;  
  40.     items.splice = [].splice();  
  41.  
  42.     // 添加 'each' 方法  
  43.     items.each = function(callback) {  
  44.       var i = 0;  
  45.       for ( ; i < length; ) {  
  46.         callback.call(items[i]);  
  47.         i++;  
  48.       }  
  49.     }  
  50.  
  51.     return items;  
  52.   };  
  53.  
  54.   (function() {  
  55.  
  56.     // 查找green項,修改字體大小  
  57.     $("#green").style.fontSize = "2em";  
  58.  
  59.     // 通過id查找,修改背景色  
  60.     $$("li").each(function() {  
  61.       this.style.backgroundColor = this.id;  
  62.     });  
  63.   }());  
  64.  
  65. </script> 

注意,IE8是不支持將一個nodeList轉換為Array的。

classList

使用jQuery對CSS類操作十分方便,幸運的是,現代瀏覽器里也內置了一下方法能夠很方便的操作它們,主要用到了classList對象。下面是一些基本操作兩種方式的對比。

  1. window.$ = function(selector) {  
  2.   return document.querySelector(selector);  
  3. };  
  4.  
  5. //----增加CSS類------  
  6.  
  7. /* jQuery */ 
  8. $(".main-content").addClass("someClass");  
  9.  
  10. /* 等效內置方法 */ 
  11. $(".main-content").classList.add("someClass");  
  12.  
  13. //----刪除一個CSS類-----  
  14.  
  15. /* jQuery */ 
  16. $(".main-content").removeClass("someClass");  
  17.  
  18. /* 等效內置方法 */ 
  19. $(".main-content").classList.remove("someClass");  
  20.  
  21. //----判斷是否存在一個CSS類---  
  22.  
  23. /* jQuery */ 
  24. if($(".main-content").hasClass("someClass"))  
  25.  
  26. /* 等效內置方法 */ 
  27. if($(".main-content").classList.contains("someClass")) 

相對于jQuery提供大量豐富的方法,上面說的這幾個現代瀏覽器里內置的功能顯得很簡單,但如果項目中的要求不高,這些替代方法能大大的減少你的應用依賴。

***要提醒的是,這些內置方法在不同的瀏覽器和不同的版本中支持程度不一樣,下面是它們的支持程度參考表。

附圖1:各種瀏覽器對querySelector/querySelectorAll的兼容支持

各種瀏覽器對querySelector/querySelectorAll的兼容支持

附圖1:各種瀏覽器對classlist的兼容支持

各種瀏覽器對classlist的兼容支持

參考資料:

  1. 5 Things You Should Stop Doing With jQuery

  2. Native equivalents of jQuery functions

  3. http://caniuse.com

原文鏈接:http://www.aqee.net/native-methods-jquery/

責任編輯:林師授 來源: 外刊IT評論
相關推薦

2020-12-17 11:08:20

Safari手機瀏覽器蘋果

2021-11-15 10:52:04

谷歌 Chrome 瀏覽器

2015-07-23 10:17:27

瀏覽器內核

2010-07-09 13:07:58

Linux環(huán)境瀏覽器

2023-05-17 00:10:55

GPU瀏覽器解鎖

2011-09-15 16:33:25

2012-06-11 09:59:08

傲游瀏覽器內置功能

2024-08-14 17:30:17

2010-03-23 11:25:53

2012-08-02 10:21:49

DOM瀏覽器

2010-04-05 21:57:14

Netscape瀏覽器

2021-07-05 12:23:01

OperaChromebooks瀏覽器

2022-06-20 09:01:56

Plasmo開源

2022-12-26 23:38:10

瀏覽器擴展工具

2020-11-17 08:07:29

存儲類型瀏覽器

2021-05-11 05:39:07

Edge微軟瀏覽器

2009-08-20 09:18:27

Silverlight

2009-09-04 09:27:48

C#調用瀏覽器

2009-04-16 08:29:03

IE8自定義功能瀏覽器

2009-08-18 13:59:21

C#多標簽瀏覽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看国产视频在线 | 精品国产高清一区二区三区 | 五十女人一级毛片 | 精品国产一区二区三区久久 | 嫩草视频在线 | 99精品久久 | 国产一区在线免费观看视频 | 国产精品揄拍一区二区久久国内亚洲精 | 国产精品a一区二区三区网址 | 国产日韩精品一区 | 夜夜精品视频 | 欧美日韩一区二区在线 | 99综合在线 | 精品不卡| 欧美视频免费 | 久久三区 | 成人无遮挡毛片免费看 | 中文字幕一区在线观看视频 | 色综合久久天天综合网 | 精品一区二区三区四区外站 | 久久久久久久久一区 | 久久精品无码一区二区三区 | 一区二区中文字幕 | 久久成人人人人精品欧 | 欧美一级久久精品 | 成人在线视频免费看 | 日韩中文字幕在线观看视频 | 成人精品鲁一区一区二区 | 中文一区二区 | 久久高清精品 | 亚洲精品一区二区三区 | 日韩在线一区二区 | 久久亚洲二区 | 黄色一级片在线播放 | 国产成人精品久久久 | 久久精品成人 | 久久国产精品一区 | 亚洲一区二区久久 | 色综合久久88色综合天天 | 欧美亚洲视频在线观看 | 午夜国产精品视频 |