是时候和 jQuery 说拜拜了么?

时间: 2017-11-09阅读: 866标签: jquery

自从2006年,jQuery发布以来,浏览器的API和DOM取得了长足的发展。在网络上也时不时会看到,“是时候和jQuery说拜拜了”,最著名的莫过于在2013年的这篇文章You Might Not Need jQuery。这里就不再重复的再说这个陈旧的话题,不过自从那篇文章发表后,浏览器确实在一点一点的改变着,发展着。浏览器继续发布和更新它们的API,有的是直接从jQuery那借鉴过来的。

下面就来看看一些新的可以代替jQuery方法的浏览器的API。

从页面删除一个元素

在以前如果你要使用浏览器提供的API来删除一个元素,你不得不采用迂回的方法来达到目的。比如el.parentNode.removeChild(el);,现在就不用使用这样迂回的方法了。下面就来比较下jQuery和浏览器新的API删除一个元素的使用方法。

jQuery:

var $elem = $(".someClass") //选中元素
$elem.remove(); //删除元素

使用浏览器新API:

var elem = document.querySelector(".someClass"); //选中元素
elem.remove() //删除元素

这里提醒下,如果使用了$elem这种表示方法,代表使用了jQuery;如果是elem,则表示使用的是浏览器原生的方法。

插入一个元素

jQuery:

$elem.prepend($someOtherElem);

使用浏览器新API:

elem.prepend(someOtherElem);

在指定元素前插入内容

jQuery:

$elem.before($someOtherElem);

使用浏览器新API:

elem.before(someOtherElem);

替换元素

jQuery:

$elem.replaceWith($someOtherElem);

使用浏览器新API:

elem.replaceWith(someOtherElem);

找到最近的一个元素

jQuery:

$elem.closest("div");

使用浏览器新API:

elem.closest("div");

看到了么,在新的浏览器中,提供了和jQuery几乎一模一样的方法。随着浏览器技术的发展,jQuery迟早会光荣的退出历史的舞台,在web的发展史上也会留下浓墨重彩的一笔。

下面看看各个浏览器对这些新的DOM的操作方法的支持情况,数据来自Caniuse

可以发现在桌面上支持的也还不错,主要是IE的支持情况不是很理想;而在移动端支持的比较好,可以放心大胆的使用了。

隐藏一个元素

jQuery:

$elem.fadeIn();

为了使动画更自然,通过CSS配合js,可以做一个简单的过渡渐隐渐显的效果。

.thingy {
  display: none;
  opacity: 0;
  transition: .8s;
}

使用浏览器新API:

elem.style.display = "block";
requestAnimationFrame(() => elem.style.opacity = 1);

只触发一次事件

jQuery:

$elem.one("click", someFunc);

在以前当遇到这样只触发一次事件的时候,需要用到一个回调方法来删除事件。

function dostuff() {
  alert("some stuff happened");
  this.removeEventListener("click", dostuff);
}
var button = document.querySelector("button");
button.addEventListener("click", dostuff);

现在有更加方便的方法了,只需要给addEventListener方法传入一个布尔参数就可以达到这样的目的。

elem.addEventListener('click', someFunc, { once: true, });

如果你仍然想捕获这个事件并且也只调用一次,那么你依然可以通过传入一个参数来搞定:

elem.addEventListener('click', myClickHandler, {
  once: true,
  capture: true
});

动画

虽然jQuery提供了animate的方法,但是它的功能非常有限。

$elem.animate({
  width: "70%",
  opacity: 0.4,
  marginLeft: "0.6in",
  fontSize: "3em",
  borderWidth: "10px"
}, 1500);

在jQuery的文档中有说明,所以能被运动的属性的值,应该都是可以使用数字来表示的;如上所属,如果一个属性的值,不能够用数字来表示,则不能使用jQuery的animate方法。比如当你要用transform和颜色来实现动画效果的时候,就不能使用jQuery的animate方法了。不过,浏览器提供一个新的方法Web Animations API来制作动画效果。

var elem = document.querySelector('.animate-me');
elem.animate([
  { 
    transform: 'translateY(-1000px) scaleY(2.5) scaleX(.2)', 
    transformOrigin: '50% 0', 
    filter: 'blur(40px)', 
    opacity: 0 
  },
  { 
    transform: 'translateY(0) scaleY(1) scaleX(1)',
    transformOrigin: '50% 50%',
    filter: 'blur(0)',
    opacity: 1 
  }
], 1000);

Ajax

在过去jQuery一个关键的卖点就是它的Ajax方法,jQuery把XMLHttpRequest进行了很好的封装,提供了优雅的Ajax方法,使用起来也确实非常方便:

$.ajax('https://some.url', {
  success: (data) => { /* do stuff with the data */ }
});

当然现在浏览器提供fetch API来代替XMLHttpRequest,并且现在所有的浏览器都支持它。

fetch('https://some.url')
  .then(response => response.json())
  .then(data => {
    // do stuff with the data
  });

当然fetch方法可能没有想象中的那么简单。但是,它比在以XMLHttpRequest上来建立任何功能要更加的通用和方便。

当然,我们如果要想更加的易于使用它,那可以借助与一些第三方的封装好的微型的类库...

Axios是一个非常流行的专门用来进行Ajax操作的库。非常轻量,它只专注与一件事即Ajax。虽然它们不会像jQuery一样被大规模的测试使用,但是它们确实为替代jQuery提供了可代替的选择。

虽然,按现在浏览器技术的发展,使用它们提供的DOM操作方法完全可以应付web开发工作!但还是有很多的顾虑,比如各个浏览器厂商支持程度不一样,很多的开发者为了保险起见,还是觉得使用jQuery更安全一些。大多数时候,你完全不用顾虑这么多,尽管用就是了,很多的时候只要在你的页面中引用一个 polyfill就能很好的处理那些不兼容新方法的浏览器。

只需要引入这个简单的脚步,就可以处理任何兼容问题。详细可以去它的官网看看polyfill.io

jQuery很慢吗?

当然,jQuery可能比那些写的糟糕的js要快,但是这也是你要更加好好学习javascript的理由!作为一个jQuery的主要贡献者Paul Irish曾说道:

为了有更好的性能,不要使用jQuery的hide()方法

作为jQuery的创建者,在它的一本书中Secrets of the JavaScript Ninja曾经说过这样一段话:

如果你在使用一个第三方的javascript的库的时候,你需要了解它的一个原理。最主要的一个原因是性能。了解一个库的工作原理,可以使你写出更加高性能的代码。

真的可以和jQuery说拜拜了么?

真的可以和jQuery说拜拜了么?还真不是那么容易,特别是jQuery发展了这么多年,已经形成了一个庞大的生态圈。所以现在有很多的微型库试图模仿jQuery的风格,来增加对开发者们的亲切感。

  • W3C的专家Lea Verou写过一篇文章jQuery Considered Harmful并且写了一个Bliss.js微型库。它就是模仿jQuery的语法风格$
  • Paul Irish也写过一个Bling.js脚本也是用来模仿模仿jQuery的语法风格$
  • Remy Sharp提供了一个微型脚本库min.js

当然我并不是一个jQuery反对者。现在依然还有很多非常棒的开发者选择使用jQuery。如果你已经习惯了使用它,当然可以继续使用它。现在很多的企业在招聘的时候,仍然把它作为一个必备的技能要求。不过,微软宣布了一个消息,Internet Explorer 11将是IE浏览器的最后一个版本,一旦IE退出了web的舞台,那么jQuery也可能随着IE的消亡也会推出历史舞台。到时候,jQuery可能就真多没有存在的必要了。

本文主要是从You Might Not Need jQuery这篇文章整理而来,有删减,有疏漏或者理解不到位的地方,还请多多指教!

jQuery中四个绑定事件的区别 on,bind,live,delegate

jQ中提供了四种事件监听方式,bind、live、delegate、on,对应的解除监听的函数分别是unbind,die,undelegate,off.用.bind(),把相同的一个事件处理机制用到所有匹配的DOM元素上;多事件处理

Eclipse去除jquery引入错误

去除eclipse的JS验证:第二步:右键项目 -> properties -> Builders 去掉JavaScript Validator 前面的勾,第三步:复制该js文件到某个地方,然后从eclipse中直接删除 了报错的js文件,错误消失,再把刚才那个js文件拷进来。

jquery 中的dom操作

jquery DOM 分为元素操作、属性操作、样式操作。本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得大家学习.

jQuery数据缓存$.data 的使用以及源码解析

对于DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以jQuery.expando的值命名的属性上,数据存储在全局缓存对象jQuery.cache中

jQuery实现全选、全不选以及反选操作

在写购物车案例时实现全选操作使用的是js的getAttribute()setAttribute()方法获取checked属性的值是undefined实现完成之后全选操作,如果在全选中的情况下改变其中一个的状态再点击全选,之前被取消的将不在被选中。之后使用js的DOM.checked属相的获得是true或false,操作很方便,很完美没有bug

jQuery属性操作之.val()函数

val()实例方法的三种用法:.val() : 获取匹配的元素集合中第一个元素的当前value属性值(property).val(value) : 设置匹配的元素集合中每个元素的value属性值(property).val(function(index,value){}) :钩子函数未设置或无效时

jquery设置属性attr

jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式。attr(属性名)、attr(属性名, 属性值)、attr(属性名,函数值)、attr(properties)

原生JS替代jQuery的各种方法汇总

前端发展很快,现代浏览器原生 API 已经足够好用。我们并不需要为了操作 DOM、Event 等再学习一下 jQuery 的 API。同时由于 React、Angular、Vue 等框架的流行,直接操作 DOM 不再是好的模式,jQuery 使用场景大大减少。

jquery的ajax中的参数理解

jquery中的ajax方法参数详解,这里整理了一些供大家参考:url、type、dataType、async、headers、beforeSend (XHR)、cache、data、traditional、contentType、success(data,textStatus,XHR)等

Jquery如何序列化form表单数据为JSON对象

jquery中serialize()方法做的是将表单中的数据以htpp请求格式拼接成字符串。serialize确实是能够解决一般的提交数据,但是有时我们需要的是一个object对象,而不是字符串(比如jqgrid reload时设置查询条件参数,就需要object对象)。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯