jQuery函数的等价原生函数代码示例


Posted in Javascript onMay 27, 2013

我们针对常用的jQuery方法以及其等价原生方法的性能做了一些测试(1, 2, 3)。
我知道你在想什么。原生方法明显要比jQuery方法快,因为jQuery方法要处理浏览器兼容以及其他一些事情。是的,我完全赞成。写这篇文章并不是出于反对使用jQuery,但如果你针对的是现代浏览器,那么使用原生方法会使性能有很大的提升。

许多开发者没有意识到大多数他们使用的jQuery方法可以使用原生方法,或者更轻量级的方法来代替。下面是一些代码示例,展示一些常用的jQuery方法,以及其等价原生方法。

译者注:需要注意下面有些原生方法是HTML5引用的,部分浏览器可能不能使用。

选择器
jQuery的核心之一就是能非常方便的取到DOM元素。我们只需输入CSS选择字符串,便可以得到匹配的元素。但在大多数情况下,我们可以用简单的原生代码达到同样的效果。

//----得到页面的所有div--------- 
/* jQuery */ 
$("div") 
/* 原生 */ 
document.getElementsByTagName("div") 
//----得到所有指定class的元素--------- 
/* jQuery */ 
$(".my-class") 
/* 原生 */ 
document.querySelectorAll(".my-class") 
/* 更快的原生方法 */ 
document.getElementsByClassName("my-class") 
//----通过CSS选择得到元素---------- 
/* jQuery */ 
$(".my-class li:first-child") 
/* 原生 */ 
document.querySelectorAll(".my-class li:first-child") 
//----得到指定clsss的第一个元素---- 
/* jQuery */ 
$(".my-class").get(0) 
/* 原生 */ 
document.querySelector(".my-class")

译者注:其实这里面是有些问题的,document.querySelectorAll和jQuery选择器还是有区别的,前者返回的是一个NodeList,而后者返回的是一个类数组对象。
DOM操作
jQuery还在DOM操作上频繁使用,例如插入或者删除元素。我们也可以使用原生方法来进行这些操作,你会发现这需要写额外的代码,当然也可以写自己的辅助函数来让使用起来更容易。下面是一些将元素插入到页面中的例子。
//----插入元素---- 
/* jQuery */ 
$(document.body).append("<div id='myDiv'><img src='im.gif'/></div>"); 
/* 蹩脚的原生方法 */ 
document.body.innerHTML += "<div id='myDiv'><img src='im.gif'/></div>"; 
/* 更好的原生方法 */ 
var frag = document.createDocumentFragment(); 
var myDiv = document.createElement("div"); 
myDiv.id = "myDiv"; 
var im = document.createElement("img"); 
im.src = "im.gif"; 
myDiv.appendChild(im); 
frag.appendChild(myDiv); 
document.body.appendChild(frag); 
//----前置元素---- 
// 除了最后一行 
document.body.insertBefore(frag, document.body.firstChild);

CSS classes
在jQuery中,我们可以很容易对DOM元素添加、删除、检查它的CSS class。幸运的是,利用原生方法也可以简单的办到。
// 得到DOM元素的引用 
var el = document.querySelector(".main-content"); 
//----添加class------ 
/* jQuery */ 
$(el).addClass("someClass"); 
/* 原生方法 */ 
el.classList.add("someClass"); 
//----删除class----- 
/* jQuery */ 
$(el).removeClass("someClass"); 
/* 原生方法 */ 
el.classList.remove("someClass"); 
//----是否是该class--- 
/* jQuery */ 
if($(el).hasClass("someClass")) 
/* 原生方法 */ 
if(el.classList.contains("someClass"))

修改CSS属性
总是通过Javascript修改和检索CSS属性,这样会比使用jQuery CSS函数更加简单快速,并且没有任何不必要的代码。
// 得到DOM元素引用 
var el = document.querySelector(".main-content"); 
//----设置CSS属性---- 
/* jQuery */ 
$(el).css({ 
background: "#FF0000", 
"box-shadow": "1px 1px 5px 5px red", 
width: "100px", 
height: "100px", 
display: "block" 
}); 
/* 原生 */ 
el.style.background = "#FF0000"; 
el.style.width = "100px"; 
el.style.height = "100px"; 
el.style.display = "block"; 
el.style.boxShadow = "1px 1px 5px 5px red";
Javascript 相关文章推荐
js获取变量
Aug 24 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
Jun 20 Javascript
30个精美的jQuery幻灯片效果插件和教程
Aug 23 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
微信小程序性能优化之checkSession的使用
Mar 06 Javascript
详解webpack4.x之搭建前端开发环境
Mar 28 Javascript
node.js express框架实现文件上传与下载功能实例详解
Oct 15 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
Nov 09 Javascript
vue循环中点击选中再点击取消(单选)的实现
Sep 10 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 #Javascript
jQuery动态地获取系统时间实现代码
May 24 #Javascript
JavaScript事件处理器中的event参数使用介绍
May 24 #Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
May 24 #Javascript
js过滤HTML标签以及空格的思路及代码
May 24 #Javascript
jQuery实现表头固定效果的实例代码
May 24 #Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 #Javascript
You might like
php Memcache 中实现消息队列
2009/11/24 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
python导入pandas具体步骤方法
2019/06/23 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
国家助学金获奖感言
2014/01/31 职场文书
海飞丝的广告词
2014/03/20 职场文书
区级文明单位申报材料
2014/05/15 职场文书
教师先进个人材料
2014/12/17 职场文书
公司开会通知
2015/04/20 职场文书
婚育证明样本
2015/06/16 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
css3 选择器
2022/05/11 HTML / CSS