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 相关文章推荐
一段好玩的JavaScript代码
Dec 01 Javascript
将string解析为json的几种方式小结
Nov 11 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
javascript读写json示例
Apr 11 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
浅析vue-router原理
Oct 19 Javascript
JavaScript变量提升和严格模式实例分析
Jan 27 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
详解Vue中的Props与Data细微差别
Mar 02 Javascript
JavaScript实现五子棋小游戏
Oct 26 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+jQuery实现自动补全功能源码
2013/05/15 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
linux 后台运行node服务指令方法
2018/05/23 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
ASP.NET Core中的配置详解
2021/02/05 Python
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
医学院校毕业生自荐信范文
2014/01/01 职场文书
青年志愿者活动方案
2014/08/17 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python