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 相关文章推荐
img的onload的另类用法
Jan 10 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
轻松理解JavaScript之AJAX
Mar 15 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 Javascript
JavaScript常见继承模式实例小结
Jan 11 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
antd form表单数据回显操作
Nov 02 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 url 加密解密函数代码
2011/08/26 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
python实现定时播放mp3
2015/03/29 Python
Python工程师面试必备25条知识点
2018/01/17 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
什么是.net
2015/08/03 面试题
服装促销活动方案
2014/02/23 职场文书
企业节能减排实施方案
2014/03/19 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
2015年女工委工作总结
2015/07/27 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python