[关闭]
@jeffjade 2015-12-07T12:33:00.000000Z 字数 4435 阅读 1741

常用JavaScript原生API

javascript


如今技术日新月异,各类框架库也是层次不穷。即便当年漫山红遍的JQuery(让开发者write less, do more,So Perfect!!)如今也有被替代的大势。但JS原生API写法依旧;并且有时候只不过小写一个Demo,或者产品中只有少量的前端效果或DOM操作,就去花时间&空间引入jQuery,或者React?不免有取宰牛之刀以杀鸡之嫌;故此了解下JS常用原生写法还是蛮有必要的。

直接看代码;以下是jQuery和JavaScript实现相同操作的等价代码:

选择元素

  1. // jQuery
  2. var els = $('.el');
  3. //==========================================================//
  4. // 原生方法
  5. var els = document.querySelectorAll('.el');
  6. // 函数法
  7. var $ = function (el) {
  8. return document.querySelectorAll(el);
  9. }
  10. var els = $('.el');

创建元素

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

添加/移除/切换类

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

判断是否包含类

  1. // jQuery
  2. $('.el').hasClass('className');
  3. $('.el').has('.className'); //也可以用来 判断是否包含某个元素
  4. //==========================================================//
  5. // 原生方法
  6. _hasClass(document.querySelector('.el'), className);
  7. function _hasClass( elements,cName ){
  8. return !!elements.className.match( new RegExp( "(\\s|^)" + cName + "(\\s|$)") );
  9. };

添加事件监听器

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

原生-DOM绑定事件-优化1参考HERE

  1. //DOM绑定事件-之自执行
  2. var BindEvent = (function () {
  3. if ('addEventListener' in document) {
  4. return function (dom, event, handle, ex) {
  5. dom.addEventListener(event, handle, ex || false);
  6. }
  7. } else if ('attachEvent' in document) {
  8. return function (dom, event, handle) {
  9. dom.attachEvent('on' + event, handle);
  10. }
  11. } else {
  12. return function (dom, event, handle) {
  13. dom['on' + event] = handle;
  14. }
  15. }
  16. })();

原生-DOM绑定事件-优化2

  1. //DOM绑定事件-之惰性加载(调用方去触发BindEvent之时才去做初始化)//
  2. var BindEvent = function (dom, event, handle, ex) {
  3. if ('addEventListener' in document) {
  4. BindEvent = function (dom, event, handle, ex) {
  5. dom.addEventListener(event, handle, ex || false);
  6. }
  7. } else if ('attachEvent' in document) {
  8. BindEvent = function (dom, event, handle) {
  9. dom.attachEvent('on' + event, handle);
  10. }
  11. } else {
  12. BindEvent = function (dom, event, handle) {
  13. dom['on' + event] = handle;
  14. }
  15. }
  16. BindEvent(dom, event, handle, ex);
  17. };

设置/获取属性

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

附加内容(Append)

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

克隆元素

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

移除元素

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

获取父元素

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

上一个/下一个元素

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

修改CSS属性

总是通过Javascript修改和检索CSS属性,这样会比使用jQuery CSS函数更加简单快速,并且没有任何不必要的代码。

  1. //----设置CSS属性----
  2. /* jQuery */
  3. $(el).css({
  4. background: "#FF0000",
  5. "box-shadow": "1px 1px 5px 5px red",
  6. width: "100px",
  7. height: "100px",
  8. display: "block"
  9. });
  10. //==========================================================//
  11. /* 原生 */
  12. var el = document.querySelector(".main-content");
  13. el.style.background = "#FF0000";
  14. el.style.width = "100px";
  15. el.style.height = "100px";
  16. el.style.display = "block";
  17. el.style.boxShadow = "1px 1px 5px 5px red";

XHR或AJAX

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

参考文章:http://www.iteye.com/news/28503
英文原文:http://blog.romanliutikov.com/post/63383858003/how-to-forget-about-jquery-and-start-using-native

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注