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也能包含文件
Oct 26 Javascript
可实现多表单提交的javascript函数
Aug 01 Javascript
JS子父窗口互相操作取值赋值的方法介绍
May 11 Javascript
JAVASCRIPT函数作用域和提前声明 分享
Aug 22 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
AngularJS中$watch和$timeout的使用示例
Sep 20 Javascript
jQuery编写网页版2048小游戏
Jan 06 Javascript
原生JS实现垂直手风琴效果
Feb 19 Javascript
详解node单线程实现高并发原理与node异步I/O
Sep 21 Javascript
解决vue热替换失效的根本原因
Sep 19 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
php支付宝APP支付功能
2020/07/29 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
Prototype Function对象 学习
2009/07/12 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
js实现随机点名程序
2020/09/17 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
使用npy转image图像并保存的实例
2020/07/01 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
《伯牙绝弦》教学反思
2014/03/02 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android