正如jQuery所宣称的同样,Write Less, Do More。不少时候咱们喜欢用它来解决问题。但增长一个库必然意味着更大的网络负担,意味着更高的页面初始载入时间。而且,如今与当初已经有了很大不一样,jQuery是伴随着IE6出来的,当时,jQuery在跨浏览器开发上有不可替代的做用。但今天,伴随ES5的普遍被支持以及各个浏览器自己的完善,咱们能够考虑适当的丢掉它,改善性能。
须要注意的是,并非说jQuery是不可取的,在某些场合,用它是更合适的,须要咱们本身判断。html
咱们常常用到$( document ).ready()
或者它的简写 $()
,用来传入当全部dom准备完毕后,执行逻辑的相关回调。原生js能够这么写:webpack
document.addEventListener('DOMContentLoaded', function () { // dom 已经准备好被操做了 });
咱们经常依赖于jQuery的选择器,而如今,全部的浏览器基本都支持了querySelector
与 querySelectorAll
,这里是MDN连接git
var lochNess = document.querySelector(".monsters"); console.log("It's from Scotland - " + lochNess.textContent); var scary = document.querySelectorAll(".monsters"); for (var i = 0; i < scary.length; i++) { console.log(scary[i].innerHTML); }
侦听事件是web开发中再重要不过的一环。曾经IE独树一帜,与其它浏览器提供的API不一致,致使须要用jQuery来快速开发,如今,全部的浏览器都提供了addEventListener:github
var btn = document.querySelectorAll("button"), btn[0].addEventListener("click", function () { list.addEventListener("mouseover", enlarge); }); btn[1].addEventListener("click", function () { list.removeEventListener("mouseover", enlarge); });
曾经,不使用jQuery来处理class是一件很麻烦的事情,而如今,因为classList的存在(这里是MDB连接)咱们能够快捷的解决这一类问题,另外,若是须要操做attribute,可使用setAttribute(一样是MDN连接)web
var btn = document.querySelectorAll("button"), div = document.querySelector("#myDiv"); btn[0].addEventListener("click", function () { //能够获取任意的属性 console.log(div.id); }); // Element.classList存放了全部当前元素的class var classes = div.classList; btn[1].addEventListener("click", function () { console.log(classes); }); btn[2].addEventListener("click", function () { //能够添加,删除 classes.add("red"); }); btn[3].addEventListener("click", function () { //也能够翻转 classes.toggle("hidden"); });
jQuery提供了text() html()用以操做元素的内容,咱们可使用原生的textContent与innerHTML属性代替它们。ajax
var myText = document.querySelector("#myParagraph"), btn = document.querySelectorAll("button"); // 获取 var myContent = myText.textContent; console.log("textContent: " + myContent); // 改变 btn[0].addEventListener('click', function () { myText.textContent = " Koalas are the best animals "; }); var myHtml = myText.innerHTML; console.log("innerHTML: " + myHtml); btn[1].addEventListener('click', function () { myText.innerHTML = "<button> Penguins are the best animals </button>"; });
原生的js能够这样添加与删除元素:浏览器
var lunch = document.querySelector("#lunch"); // 添加 var fries = document.createElement("div"); fries.innerHTML = '<li><h4> Fries </h4></li>'; lunch.appendChild(fries); // 特定位置添加 var beef = document.querySelector("#Beef"), topSlice = document.createElement("li"), bottomSlice = document.createElement("li"); bottomSlice.innerHTML = topSlice.innerHTML = 'Cheese'; beef.parentNode.insertBefore(topSlice, beef); beef.parentNode.insertBefore(bottomSlice, beef.nextSibling); }; //删除 var pickles = document.querySelector("#pickles"); if (pickles) { pickles.parentNode.removeChild(pickles); }
原生的js也能够遍历DOM树性能优化
var snakes = document.querySelector('#snakes'), birds = document.querySelector('#birds'); snakes.addEventListener('click', function (e) { console.log("Children: "); var children = e.target.children; for (var i = 0; i < children.length; i++) { console.log(children[i].textContent); } }); birds.addEventListener('click', function (e) { // 获取最近的兄弟节点 var previous = e.target.previousElementSibling; if (previous) { console.log("Previous sibling: " + previous.textContent); } var next = e.target.nextElementSibling; if (next) { console.log("Next sibling: " + next.textContent); } //全部的兄弟们 Array.prototype.filter.call(e.target.parentNode.children, function (child) { if (child !== e.target) { console.log(child.textContent); } }); });
jQuery提供的 each与map已经能够被ES5的forEach与map替代网络
var ninjaTurtles = ["Donatello", "Leonardo", "Michelangelo", "Raphael"]; ninjaTurtles.forEach(function (entry) { console.log(entry); }); var lovesPizza = ninjaTurtles.map(function (entry) { return entry.concat(" loves pizza!"); }); console.log(lovesPizza);
jQuery的动画效果是很是强大的,在不少场合仍是很难替代的,不过,因为CSS3,动画能够转到由CSS来实现。这部分就不给DEMO了。app
若是惟一使用jQuery的惟一理由,是它便捷的AJAX,那么,将jQuery替换成一个轻量的多的库吧!好比reqwest,这个库压缩后不到10kB。
尽全力使脚本变的更小,可使用户得到更高的加载速度,以及更好的用户体验。但也要谨慎的作取舍,不必大量的造jQuery已经提供的轮子。 除了在编码方面带来性能优化,咱们还能够借助工具达到一样的效果。能够看一看博主的webpack方面的文章 :)