关闭

是时候和 jQuery 说拜拜了么?

时间: 2017-11-09阅读: 1742标签: 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这篇文章整理而来,有删减,有疏漏或者理解不到位的地方,还请多多指教!

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/77

关闭

JQuery 自动触发事件

在JQuery中,可以使用trigger()方法完成模拟操作,trigger()方法不仅能触发浏览器支持的具有相同名称的事件,也可以触发自定义名称的事件。rigger(type[,data])方法有两个参数

jQuery的淡入淡出

在jQuery中的一些特效中,可以通过四个方法来实现元素的淡入淡出,这四个方法分别是:fadeIn()、fadeOut()、fadeToggle() 以及 fadeTo(),下面为分别为大家介绍各个方式的使用。

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

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

jquery checkbox选中、改变状态、change和click事件

jquery判断checked的三种方法:jquery赋值checked的几种写法:jquery1.6+:prop的4种赋值:checkbox click和change事件

Eclipse去除jquery引入错误

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

jquery的ajax中的参数理解

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

时隔一年,jQuery 发布 3.4.0 版本

jQuery 团队的核心开发者 Timmy Willison 今天在官网宣布了 jQuery 3.4.0,这距离上个版本 3.3.x 系列的推出已过去了一年多。Timmy 表示这可能是 3.x 分支的最后一个小版本更新,接下来的工作重心将是 jQuery 4.0 大版本的更新。

jQuery ui中sortable draggable droppable的使用

最近工作中用到了jQuery UI中排序和拖拽功能,花了大概一天的时间,搞清楚了大概的参数配置,以及遇到的一些问题,总结如下。

jQuery中页面返回顶部的方法总结

当页面过长时,通常会在页面下方有一个返回顶部的button,总结一下,大概三种实现方法,下面说下各方法及优缺点。三个方法各有优劣,不过总体来讲,jQuery的方法更适合大多数场景。

前端jquery防止数据重复提交

前端在向后端进行数据提交的时候,通常会需要在第一次提交返回前,阻止用户在快速点击发送二次请求,即防止重复提交,最简单的方法是使用标志参数或者 class 元素控制

点击更多...

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