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 相关文章推荐
&amp;lt;script defer&amp;gt; defer 是什么意思
May 10 Javascript
用javascript判断IE版本号简单实用且向后兼容
Sep 11 Javascript
js字符串转成JSON
Nov 07 Javascript
javascript白色简洁计算器
May 04 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
vue+iview写个弹框的示例代码
Dec 05 Javascript
使用javascript函数编写简单银行取钱存钱流程
May 26 Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 jQuery
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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
ThinkPHP的I方法使用详解
2014/06/18 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
chosen实现省市区三级联动
2018/08/16 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
简单谈谈Python的pycurl模块
2018/04/07 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
汽车检测与维修个人求职信
2013/09/24 职场文书
毕业生找工作求职信
2014/08/05 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js