阅读更多

22顶
10踩

Web前端

翻译新闻 忘掉jQuery,使用JavaScript原生API

2013-11-27 11:51 by 副主编 wangguo 评论(38) 有39532人浏览
jQuery目前已经成为最流行的JavaScript库,它可以让开发者“write less, do more(写得更少,做得更多)”,这也是它的核心理念。通过它,用户可以更方便地处理HTML documents、events,更轻松地实现动画效果、AJAX交互等。

尽管jQuery帮助开发者节省了大量的工作,但是并不是所有的产品都适合使用jQuery。jQuery 2.0.3版本有236KB,压缩版也有81KB,这意味着你的Web产品需要额外的加载时间和带宽,而在移动设备上则需要更多。

如果你的产品中只有少量的前端效果或DOM操作,那么完全可以抛弃臃肿的jQuery,转而使用JavaScript原生API来实现。



以下是jQuery和JavaScript实现相同操作的等价代码。

选择元素

// jQuery
var els = $('.el');

// 原生方法
var els = document.querySelectorAll('.el');

// 函数法
var $ = function (el) {
  return document.querySelectorAll(el);
}

var els = $('.el');

// 或者使用regex-based micro-selector库,地址:http://jsperf.com/micro-selector-libraries


创建元素

// jQuery
var newEl = $('<div/>');

// 原生方法
var newEl = document.createElement('div');


添加事件监听器

// jQuery
$('.el').on('event', function() {

});

// 原生方法
[].forEach.call(document.querySelectorAll('.el'), function (el) {
  el.addEventListener('event', function() {

  }, false);
});


设置/获取属性

// jQuery
$('.el').filter(':first').attr('key', 'value');
$('.el').filter(':first').attr('key');

// 原生方法
document.querySelector('.el').setAttribute('key', 'value');
document.querySelector('.el').getAttribute('key');


添加/移除/切换类

// jQuery
$('.el').addClass('class');
$('.el').removeClass('class');
$('.el').toggleClass('class');

// 原生方法
document.querySelector('.el').classList.add('class');
document.querySelector('.el').classList.remove('class');
document.querySelector('.el').classList.toggle('class');


附加内容(Append)

// jQuery
$('.el').append($('<div/>'));

// 原生方法
document.querySelector('.el').appendChild(document.createElement('div'));


克隆元素

// jQuery
var clonedEl = $('.el').clone();

// 原生方法
var clonedEl = document.querySelector('.el').cloneNode(true);


移除元素

// jQuery
$('.el').remove();

// 原生方法
remove('.el');

function remove(el) {
  var toRemove = document.querySelector(el);

  toRemove.parentNode.removeChild(toRemove);
}


获取父元素

// jQuery
$('.el').parent();

// 原生方法
document.querySelector('.el').parentNode;


上一个/下一个元素

// jQuery
$('.el').prev();
$('.el').next();

// 原生方法
document.querySelector('.el').previousElementSibling;
document.querySelector('.el').nextElementSibling;


XHR或AJAX

// jQuery
$.get('url', function (data) {

});
$.post('url', {data: data}, function (data) {

});

// 原生方法
// get
var xhr = new XMLHttpRequest();

xhr.open('GET', url);
xhr.onreadystatechange = function (data) {

}
xhr.send();

// post
var xhr = new XMLHttpRequest()

xhr.open('POST', url);
xhr.onreadystatechange = function (data) {

}
xhr.send({data: data});


以上这些只是很少一部分,你可以在浏览器的控制台中找到更多东西,或者可以参考MDN的JS API reference或者WPD的DOM文档

你也可以使用其他非常轻量级的库代替,比如http://microjs.com/列出的一些库,根据你的需求选择最合适的库,但首先要清楚,除非是不使用库无法实现某项功能,否则还是使用原生JavaScript。

英文原文:How to forget about jQuery and start using native JavaScript APIs
  • 大小: 8.2 KB
22
10
评论 共 38 条 请登录后发表评论
38 楼 shuhen2011 2013-12-12 15:40
兼容啊大哥!!!
37 楼 allenny 2013-12-02 01:22
没想代码界也像时装界一样复古潮流啊
36 楼 kenshinlk 2013-11-29 09:30
另外还有一点,一般这类框架,DOM检索都做过优化处理的,如缓存等,比你纯用原生API快。特别是页面复杂的时候,楼主有没有想过
35 楼 kenshinlk 2013-11-29 09:28
1.跨浏览器兼容性
2.代码简洁已读性
只这两个就可以看出优劣了,GZIP压缩后也就是几十K,现在不是小水管时代了大哥,要与时俱进。

当然你能做一个更mini,更强大的出来那就更好了
34 楼 矿泉水瓶 2013-11-29 09:20
挺好的,用了多年jquery,是需要回头对一下原生的,温故而知新,况且当你当时需要用editplus随手写个小demo时,没必要非得把jquery加进来
33 楼 peak 2013-11-28 20:31
原生用的字母更长,自己写完了,发现还是多出200k怎么办
32 楼 601235723 2013-11-28 17:10
我觉得楼主的文章没有一丁点价值,200多K算个毛毛球啊
31 楼 hellohank 2013-11-28 16:14
我觉得楼主这文章有价值!我们可以使用一个工具,但不能依赖它!在不同的情况下使用最合适的方法才是高效稳定之道!顶楼主!
30 楼 Allen 2013-11-28 15:38
回顾和了解一下原生JS还是好的,不然只会写jQuery也不行啊。但是开发时为了效率,还是使用jQuery的好。
29 楼 jroam 2013-11-28 14:12
只要开启了gzip后,jquery就只占了20多K,也不费流量,再说,程序员的时间是很宝贵的。
28 楼 debbbbie 2013-11-28 13:39
程序员都在用生命写代码。
27 楼 ydzhony1 2013-11-28 12:46
不管是不是好文章,只要你学到了.就属于你的了.
26 楼 Chin风 2013-11-28 12:35
好多喷子啊!我觉得挺好啊!
25 楼 iamjxc 2013-11-28 11:52
看了文章, 学到很多以前都不知道的 API, 学习了
24 楼 damoqiongqiu 2013-11-28 11:04
    
这烂文到底想说啥?
23 楼 夜神月 2013-11-28 10:12
81KB在当今的传输速度里完全可以忽略,另外这81KB也是对一些基础操作的封装,使得用的最频繁的操作提升高可使用率和高效率。没有这81KB可能使你目前的项目的js代码量增大几倍,并增加了很多使用和兼容上的BUG。开发效率和调试这些BUG的时间是不是也算在成本里呢?
22 楼 showvim 2013-11-28 10:04
这文章只是给大家提供一个思路而已,有些人是不是看得太狭隘了!
21 楼 pharaohsprince 2013-11-28 09:37
这种文档也能置顶。靠~~~
20 楼 object_object 2013-11-28 09:30
无知。。。。
19 楼 lianglove_0 2013-11-28 09:29
兼容性啊蝈蝈

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Crystal Enterprise10报表开发工具手册

    Crystal Enterprise10报表开发工具手册

  • WEB 上企业级报表平台 - Crystal Enterprise 9 技术白皮书

    概述信息为每一个企业提供了制定和实施成功的商业战略所需的原始素材。为了充分利用企业信息资产所带来的优势,每一个应用都需要一个可扩展的、可靠的、基于Web的解决方案,用于报表、分析和向相关的人员提供关键任务信息,以保证业务的成功。 Crystal Enterprise提供了一个可在全球范围内扩展的、多层容错的体系结构,为满足最为苛刻的业务环境而构建。它提供了用于构建或与Intranet、Extr

  • 水晶企业 10 (Crystal Enterprise) 概述及技术白皮书资源

    工业界最佳的报表体系结构水晶企业是用于数据访问,报表,和信息交付的通用体系结构,允许你快速响应任何报表和应用程序开发需求。水晶企业被设计来无缝的与现有数据,网站,和应用程序集成,并且无需强加一套新的标准和过程。水晶企业提供用于数据访问,报表,和信息交付的基础构造,允许你快速响应任何报表和应用程序开发需求。放大借助水晶报表的能力和产品家族 - 高性能报表设计的世界标准 - 我们的企业级报表技术被证明

  • 学习笔记(1)--CrystalEnterprise组件

    google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//<script type="text/javascript"

  • 如何忘却jQuery,开始使用JavaScript原生API

    如何忘却jQuery,开始使用JavaScript原生API JavaScript就在这里随时等候你的召唤,但是也许你还没有准备好如何使用他。为什么不用jQuery呢?因为他很慢并且你的网站真的不需要这些多余的负担。   我不是来这里...

  • [译] 咋才能忘掉jQuery然后用原生的js apis 呢

    javascript已经准备好了,可能你还没有准备好拥抱它。那为啥不用jquery呢。。因为它慢啊。而且体积还不小,你的网站可能真的不是特别需要, Select elements // jQuery var els = $('.el'); // Native var els = ...

  • 原生javascript 实现瀑布流

    前言刚用 jquery 实现了瀑布流效果。但是其实现方法,我并不满意,所以我还在...与其缠绕在 jquery 里,不如直接跳到 javascript 原生方法里。让我们抛开 jquery,忘掉各种高级方法,用最原始的方法去实现 瀑布流效果。

  • 6 大技巧帮助初学者快速掌握 JavaScript!

    你很容易忘掉之前学到的东西。 JavaScript工具太多并且经常更新,以至于很难找到学习的切入点。 幸运的是,这些难题最终能够被克服。在这篇文章,将展示六个能够帮助你更快、更开心、更高效地学习JavaScript的六个...

  • BusinessObjects SDK应用开发

    <br />在BO相关的报表开发项目中,一般使用BusinessObject Enterprise SDK来进行开发,这样可以更方便、快捷、高效。    BusinessObject Enterprise SDK(SDK分.NET和JAVA两个版本,本文介绍JAVA版本)是SAP公司提供的一套用来开发BO相关项目的一套API,可以实现与InfoView相似功能的开发。可以实现认证、用户和对象安全、计划、发布、服务器的管理和审计(Audit)、管理报表文档及各种对象的功能,还可以实现多个BO Server之间

  • Crystal Reports 产品家族

    目录:一、Crystal Reports 9二、Crystal Analysis Professional三、Crystal Enterprise 9四、Crystal Enterprise For SAP------------------------------------------------一、Crystal Reports 9http://www.prient.com/crystal/

  • 做前端的能不能不学习 JavaScript 而直接学习 jQuery ?

    做前端的能不能不学习 JavaScript 而直接学习 jQuery ? 谢谢大家的回答,现在不明白的是前端到底涉及到哪些方面,这潭水到底有多深啊,感觉要学很多东西。 可以 1 条评论 分享   ...

  • Javascript 复盘深入解读之—异步与Promise

    它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise ...

  • Javascript DOM – HTML文档处理

    自从开始用jQuery开始,就逐渐地产生了对jQuery的依赖,对原生的一些JavaScript操作也慢慢的忘掉了,这样不好..不好.. 偶尔还是要拿出来温习一下。原文1、创建节点createElement()var node = document.createElement...

  • immutability因React官方出镜之使用总结分享!

    使用immutable后,所有数据都要类似选择器,一个一个往下选择,并不是说它不好、功能不够强大,只是自己有些不喜欢它类似JQuery选择器一样的语法,get、getIn、set、List等的使用方式,当然它也是可以使用 ...

  • jQuery学习总结(一)

    关于jQuery操作DOM的内容完了吗?不,还没有,还有更多! 1、尽可能的用#id和属性选择器 在选择DOM元素时,jQuery的选择器无疑提供了非常多的功能,除了特性选择器外,对文档元素的查找操作,我觉得还是#id和...

Global site tag (gtag.js) - Google Analytics