Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          jQuery目前已經(jīng)成為最流行的JavaScript庫,它可以讓開發(fā)者“write less, do more(寫得更少,做得更多)”,這也是它的核心理念。通過它,用戶可以更方便地處理HTML documents、events,更輕松地實現(xiàn)動畫效果、AJAX交互等。?

          盡管jQuery幫助開發(fā)者節(jié)省了大量的工作,但是并不是所有的產(chǎn)品都適合使用jQuery。jQuery 2.0.3版本有236KB,壓縮版也有81KB,這意味著你的Web產(chǎn)品需要額外的加載時間和帶寬,而在移動設(shè)備上則需要更多。?

          如果你的產(chǎn)品中只有少量的前端效果或DOM操作,那么完全可以拋棄臃腫的jQuery,轉(zhuǎn)而使用JavaScript原生API來實現(xiàn)。 ?



          以下是jQuery和JavaScript實現(xiàn)相同操作的等價代碼。?

          選擇元素 ?

          Javascript代碼?
          1. //?jQuery ??
          2. var ?els?=?$( '.el' );??
          3. ??
          4. //?原生方法 ??
          5. var ?els?=?document.querySelectorAll( '.el' );??
          6. ??
          7. //?函數(shù)法 ??
          8. var ?$?=? function ?(el)?{??
          9. ??return?document.querySelectorAll(el);??
          10. }??
          11. ??
          12. var ?els?=?$( '.el' );??
          13. ??
          14. //?或者使用regex-based?micro-selector庫,地址:http://jsperf.com/micro-selector-libraries ??


          創(chuàng)建元素 ?

          Javascript代碼?
          1. //?jQuery ??
          2. var ?newEl?=?$( '<div/>' );??
          3. ??
          4. //?原生方法 ??
          5. var ?newEl?=?document.createElement( 'div' );??


          添加事件監(jiān)聽器 ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').on('event',?function()?{??
          3. ??
          4. });??
          5. ??
          6. //?原生方法 ??
          7. [].forEach.call(document.querySelectorAll('.el'),?function?(el)?{??
          8. ??el.addEventListener('event',?function()?{??
          9. ??
          10. ??},?false);??
          11. });??


          設(shè)置/獲取屬性 ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').filter(':first').attr('key',?'value');??
          3. $('.el').filter(':first').attr('key');??
          4. ??
          5. //?原生方法 ??
          6. document.querySelector('.el').setAttribute('key',?'value');??
          7. document.querySelector('.el').getAttribute('key');??


          添加/移除/切換類 ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').addClass('class');??
          3. $('.el').removeClass('class');??
          4. $('.el').toggleClass('class');??
          5. ??
          6. //?原生方法 ??
          7. document.querySelector('.el').classList.add('class');??
          8. document.querySelector('.el').classList.remove('class');??
          9. document.querySelector('.el').classList.toggle('class');??


          附加內(nèi)容(Append) ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').append($('<div/>'));??
          3. ??
          4. //?原生方法 ??
          5. document.querySelector('.el').appendChild(document.createElement('div'));??


          克隆元素 ?

          Javascript代碼?
          1. //?jQuery ??
          2. var ?clonedEl?=?$( '.el' ).clone();??
          3. ??
          4. //?原生方法 ??
          5. var ?clonedEl?=?document.querySelector( '.el' ).cloneNode( true );??


          移除元素 ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').remove();??
          3. ??
          4. //?原生方法 ??
          5. remove('.el');??
          6. ??
          7. function ?remove(el)?{??
          8. ??var?toRemove?=?document.querySelector(el);??
          9. ??
          10. ??toRemove.parentNode.removeChild(toRemove);??
          11. }??


          獲取父元素 ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').parent();??
          3. ??
          4. //?原生方法 ??
          5. document.querySelector('.el').parentNode;??


          上一個/下一個元素 ?

          Javascript代碼?
          1. //?jQuery ??
          2. $('.el').prev();??
          3. $('.el').next();??
          4. ??
          5. //?原生方法 ??
          6. document.querySelector('.el').previousElementSibling;??
          7. document.querySelector('.el').nextElementSibling;??


          XHR或AJAX ?

          Javascript代碼?
          1. //?jQuery ??
          2. $.get('url',?function?(data)?{??
          3. ??
          4. });??
          5. $.post('url',?{data:?data},?function?(data)?{??
          6. ??
          7. });??
          8. ??
          9. //?原生方法 ??
          10. //?get ??
          11. var ?xhr?=? new ?XMLHttpRequest();??
          12. ??
          13. xhr.open('GET',?url);??
          14. xhr.onreadystatechange?=?function?(data)?{??
          15. ??
          16. }??
          17. xhr.send();??
          18. ??
          19. //?post ??
          20. var ?xhr?=? new ?XMLHttpRequest()??
          21. ??
          22. xhr.open('POST',?url);??
          23. xhr.onreadystatechange?=?function?(data)?{??
          24. ??
          25. }??
          26. xhr.send({data:?data});??


          以上這些只是很少一部分,你可以在瀏覽器的控制臺中找到更多東西,或者可以參考 MDN的JS API reference 或者 WPD的DOM文檔 ?

          你也可以使用其他非常輕量級的庫代替,比如 http://microjs.com/ 列出的一些庫,根據(jù)你的需求選擇最合適的庫,但首先要清楚,除非是不使用庫無法實現(xiàn)某項功能,否則還是使用原生JavaScript。?

          英文原文: How to forget about jQuery and start using native JavaScript APIs
          posted on 2013-11-28 09:31 禮物 閱讀(760) 評論(0)  編輯  收藏 所屬分類: jquery
          主站蜘蛛池模板: 镇康县| 四川省| 桃园市| 沙田区| 宝坻区| 酒泉市| 从化市| 台南县| 麻栗坡县| 漾濞| 舞钢市| 永修县| 枣庄市| 南木林县| 樟树市| 重庆市| 咸丰县| 白朗县| 新源县| 曲阳县| 岢岚县| 延吉市| 崇州市| 溧阳市| 鸡东县| 吉林市| 辛集市| 册亨县| 遵义县| 黄浦区| 石林| 丰顺县| 特克斯县| 凌云县| 延边| 遂昌县| 巴东县| 丽江市| 古交市| 民丰县| 乌兰浩特市|