Terry.Li-彬

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

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

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

          如果你的產(chǎn)品中只有少量的前端效果或DOM操作,那么完全可以?huà)仐売纺[的jQuery,轉(zhuǎn)而使用JavaScript原生API來(lái)實(shí)現(xiàn)。 ?



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

          選擇元素 ?

          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庫(kù),地址: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)聽(tīng)器 ?

          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');??


          添加/移除/切換類(lèi) ?

          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;??


          上一個(gè)/下一個(gè)元素 ?

          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});??


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

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

          英文原文: How to forget about jQuery and start using native JavaScript APIs
          posted on 2013-11-28 09:31 禮物 閱讀(760) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): jquery
          主站蜘蛛池模板: 建平县| 昔阳县| 德州市| 榆树市| 乐东| 胶南市| 湖州市| 布拖县| 鄱阳县| 英山县| 星座| 信丰县| 鸡东县| 内黄县| 眉山市| 南江县| 大余县| 张家口市| 邓州市| 土默特左旗| 故城县| 商都县| 鄂伦春自治旗| 东港市| 乐至县| 土默特左旗| 南木林县| 日土县| 浦江县| 永川市| 左权县| 宜黄县| 伊宁县| 莆田市| 宣汉县| 香港 | 凤冈县| 磐安县| 汕头市| 波密县| 耿马|