你可能不需要 jQuery!使用原生 JavaScript 进行开发

jquery 转原生js 的一些方法 / jq转js / jquery与js。



  很多的 JavaScript 开发人员,包括我在内,都很喜欢 jQuery。因为它的简单,因为它有很多丰富的插件可供使用,和其它优秀的工具一样,jQuery 让我们开发人员能够更轻松的开发网站和 Web 应用。

  然而,另一方面,作为前端开发的基础框架,jQuery 包含大量的兼容性代码和扩展功能,其中有很多在你的整个项目中可能都不会用到。其实如果你只是针对现代浏览器,很多功能使用原生的 JavaScript 就可以实现,即使是拖后腿的低版本 IE 浏览器,兼容性也是很容易处理的。

  下面就带大家一起看看在 IE 浏览器环境中如果使用原生 JavaScript 代码实现 jQuery 中的功能。如果你打算自己开发一个小的基础框架,可以好好参考一下这些代码的实现。

Ajax Post

jQuery:

$.ajax({
  type: ‘POST‘,
  url: ‘/my/url‘,
  data: data
});

IE8+:

var request = new XMLHttpRequest();
request.open(‘POST‘, ‘/my/url‘, true);
request.send(data);

Ajax Get

jQuery:

$.ajax({
  type: ‘GET‘,
  url: ‘/my/url‘,
  success: function(resp) {

  },
  error: function() {

  }
}); 

IE8+:

request = new XMLHttpRequest();
request.open(‘GET‘, ‘/my/url‘, true);

request.onreadystatechange = function() {
  if (this.readyState === 4){
    if (this.status >= 200 && this.status < 400){
      // Success!
      resp = this.responseText;
    } else {
      // Error :(
    }
  }
}

request.send();
request = null;

加载 JSON

jQuery:

$.getJSON(‘/my/url‘, function(data) {

});

IE8+:

request = new XMLHttpRequest();
request.open(‘GET‘, ‘/my/url‘, true);

request.onreadystatechange = function() {
  if (this.readyState === 4){
    if (this.status >= 200 && this.status < 400){
      // Success!
      data = JSON.parse(this.responseText);
    } else {
      // Error :(
    }
  }
}

request.send();
request = null;

淡入效果

jQuery:

$(el).fadeIn();  

IE8+:

function fadeIn(el) {
  var opacity = 0;

  el.style.opacity = 0;
  el.style.filter = ‘‘;

  var last = +new Date();
  var tick = function() {
    opacity += (new Date() - last) / 400;
    el.style.opacity = opacity;
    el.style.filter = ‘alpha(opacity=‘ + (100 * opacity)|0 + ‘)‘;

    last = +new Date();

    if (opacity < 1) {
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
    }
  };

  tick();
}

fadeIn(el);

显示和隐藏

jQuery:

$(el).show();
$(el).hide();

IE8+:

el.style.display = ‘‘;
el.style.display = ‘none‘;

添加 Class

jQuery:

$(el).addClass(className);

IE8+:

if (el.classList)
  el.classList.add(className);
else
  el.className += ‘ ‘ + className;

插入 HTML

jQuery:

$(el).before(htmlString);
$(parent).append(el);
$(el).after(htmlString);

IE8+:

el.insertAdjacentHTML(‘beforebegin‘, htmlString);
parent.appendChild(el);
el.insertAdjacentHTML(‘afterend‘, htmlString);

获取子节点

jQuery:

$(el).children();

IE8+:

var children = [];
for (var i=el.children.length; i--;){
  // Skip comment nodes on IE8
  if (el.children[i].nodeType != 8)
    children.unshift(el.children[i]);
}

循环节点

jQuery:

$(selector).each(function(i, el){

});

IE8+:

function forEachElement(selector, fn) {
  var elements = document.querySelectorAll(selector);
  for (var i = 0; i < elements.length; i++)
    fn(elements[i], i);
}

forEachElement(selector, function(el, i){

});

清空节点

jQuery:

$(el).empty();

IE8+:

while(el.firstChild)
  el.removeChild(el.firstChild)

过滤节点

jQuery:

$(selector).filter(filterFn);

IE8+:

function filter(selector, filterFn) {
  var elements = document.querySelectorAll(selector);
  var out = [];
  for (var i = elements.length; i--;) {
    if (filterFn(elements[i]))
      out.unshift(elements[i]);
  }
  return out;
}

filter(selector, filterFn);

查找元素

jQuery:

$(el).find(selector);
$(‘.my #awesome selector‘);

IE8+:

el.querySelectorAll(selector);
document.querySelectorAll(‘.my #awesome selector‘);

获取属性、HTML或者文本

jQuery:

$(el).attr(‘tabindex‘);
$(el).html();
$(‘<div>‘).append($(el).clone()).html();
$(el).text();

IE8+:

el.getAttribute(‘tabindex‘);
el.innerHTML
el.outerHTML
el.textContent || el.innerText

判断是否包含某个 css class

jQuery:

$(el).hasClass(className);

IE8+:

if (el.classList)
  el.classList.contains(className);
else
  new RegExp(‘(^| )‘ + className + ‘( |$)‘, ‘gi‘).test(el.className); 

选择器匹配

jQuery:

$(el).is(‘.my-class‘);

IE8+:

var matches = function(el, selector) {
  var _matches = (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector);

  if (_matches) {
    return _matches.call(el, selector);
  } else {
    var nodes = el.parentNode.querySelectorAll(selector);
    for (var i = nodes.length; i--;)
      if (nodes[i] === el) {
        return true;
    }
    return false;
}

matches(el, ‘.my-class‘);

前一个节点

jQuery:

$(el).prev();

IE8+:

// prevSibling can include text nodes
function previousElementSibling(el) {
  do { el = el.previousSibling; } while ( el && el.nodeType !== 1 );
  return el;
}

el.previousElementSibling || previousElementSibling(el);

后一个节点

jQuery:

$(el).next();

IE8+:

// nextSibling can include text nodes
function nextElementSibling(el) {
  do { el = el.nextSibling; } while ( el && el.nodeType !== 1 );
  return el;
}

el.nextElementSibling || nextElementSibling(el);

外部高度

jQuery:

$(el).outerHeight()

IE8+:

function outerHeight(el, includeMargin){
  var height = el.offsetHeight;

  if(includeMargin){
    var style = el.currentStyle || getComputedStyle(el);
    height += parseInt(style.marginTop) + parseInt(style.marginBottom);
  }
  return height;
}

outerHeight(el, true);

外部宽度

jQuery:

$(el).outerWidth()

IE8+:

function outerWidth(el, includeMargin){
  var height = el.offsetWidth;

  if(includeMargin){
    var style = el.currentStyle || getComputedStyle(el);
    height += parseInt(style.marginLeft) + parseInt(style.marginRight);
  }
  return height;
}

outerWidth(el, true);

判断是否数组

jQuery:

$.isArray(arr);

IE8+:

isArray = Array.isArray || function(arr) {
  return Object.prototype.toString.call(arr) == ‘[object Array]‘;
}

isArray(arr);

数组转换

jQuery:

$.map(array, function(value, index){

})

IE8+:

function map(arr, fn) {
  var results = []
  for (var i = 0; i < arr.length; i++)
    results.push(fn(arr[i], i))
  return results
}

map(array, function(value, index){

})

  类似的还有很多很多,可以参考这里:http://youmightnotneedjquery.com/

源:http://www.cnblogs.com/lhb25/p/you-might-not-need-jquery.html

时间: 2024-08-16 05:50:52

你可能不需要 jQuery!使用原生 JavaScript 进行开发的相关文章

为什么原生 JavaScript 开发越来越多受欢迎?是否应该跟风用原生JavaScript代替 jQuery等库?

本文标签:  jQuery的作用 原生JavaScript优势 jQuery官网 jQuery处理DOM和跨浏览器 JavaScript新特性 互联网杂谈 随着 JavaScript 本身的完善,越来越多的人开始喜欢使用原生 JavaScript 开发代替各种库,其中不少人发出了用原生 JavaScript 代替 jQuery 的声音.这并不是什么坏事,但也不见得就是好事.如果你真的想把 jQuery从前端依赖库中移除掉,我建议你慎重考虑. 首先 jQuery 是一个第三方库.库存在的价值之一在

抛弃jQuery,拥抱原生JavaScript

前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操作 DOM 不再是好的模式,jQuery 使用场景大大减少.因此我们项目组在双十一后抽了一周时间,把所有代码中的 jQuery 移除.下面总结一下: Why not jQuery 1. 模式变革 jQuery 代表着传统的以 DOM 为中心的开发模式,但现在复杂页面开发流行的是以 React 为代表

为什么要用原生 JavaScript 代替 jQuery?

随着 JavaScript 本身的完善,越来越多的人开始喜欢使用原生 JavaScript 开发代替各种库,其中不少人发出了用原生 JavaScript 代替 jQuery 的声音.这并不是什么坏事,但也不见得就是好事.如果你真的想把 jQuery 从前端依赖库中移除掉,我建议你慎重考虑. 首先 jQuery 是一个第三方库.库存在的价值之一在于它能极大地简化开发.一般情况下,第三方库都是由原生语言特性和基础 API 库实现的.因此,理论上来说,任何库第三方库都是可以用原生语言特性代替的,问题在

常见的dom操作----原生JavaScript与jQuery

1.创建元素 文本节点 JavaScript: document.createElement(),只接收一个参数,创建后需要手动将其添加到文档树中,例如: var newDiv = document.createElement("div");if(document.body){ document.body.appendChild(newDiv);}else{ document.documentElement.appendChild(newDiv);} document.createTe

四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现

虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们的需求,下面我简单介绍一些 常见的四种提示弹出框(success,loading,error,warning),我分别用原生JavaScript和jQuery来介绍分享给各位博友! 一.首先介绍原生JavaScript来实现四种提示弹出框: 第一步:先看看html的建立 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:

抛弃jQuery 深入原生的JavaScript

学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile的JavaScript SDK 更像是在创建一个开源工程,而不是"具体的工作",不得不说,我很喜欢那样. 今天,我准备将在过去几年学到的一些基础东西与大家一起分享,这将可能帮你深入纯 JavaScript的世界,让你能更简单的做出决定--jQuery在你下个工程中是否需要. 逐步增强 虽然像jQuery这样的库有助于解决许多浏览器之间不兼容的问题,但

原生javaScript仿写jQuery的例子

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>原生javaScript仿写jQuery</title> </head> <body> <div> <div class="wrap"> <input type="text" /> <input

原生javascript实现类似jquery on方法的行为监听

原生javascript有addEventListener和attachEvent方法来注册事件,但有时候我们需要判断某一行为甚至某一函数是否被执行了,并且能够获取前一行为的参数,这个时候就需要其他方法来实现了. 项目中的原始场景是有若干个tab切换,tab组件当然是已经写好的,现在需要每次点击后保存localstorage等其他操作,需要监听tab是否被点击.下面是简单的实现事件监听方法: <!DOCTYPE html> <html lang="en"> &l

原生javascript解析xml文档

之前写过一篇 <javascript/jQuery解析或转换json和xml>链接是http://my.oschina.net/ososchina/blog/343748,这篇博客详细解释了json使用 JSON.js  window.eval() ,jQuery 与字符串互相转换的方法 ,顺便也说了一点jQuery解析xml文档的方法,这里着重论述javascript操作xml. 顺便提一下,今天做项目有一点问题,如何让服务程序接口返回的就是json,而不需要 使用 jQuery.ajax设