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 相关文章推荐
jQuery中需要注意的细节问题小结
Dec 06 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
Nov 20 Javascript
javascript函数重载解决方案分享
Feb 19 Javascript
javascript的理解及经典案例分析
May 20 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
wap手机端解决返回上一页的js实例
Dec 08 Javascript
JS中Array数组学习总结
Jan 18 Javascript
Node.js 异步异常的处理与domain模块解析
May 10 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
Jul 29 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
MySQL修改密码方法总结
2008/03/25 PHP
PHP 输出简单动态WAP页面
2009/06/09 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
python获取当前计算机cpu数量的方法
2015/04/18 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
计算机专业自荐信
2013/10/14 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
铲车司机岗位职责
2014/03/15 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
2014年科室工作总结
2014/11/20 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python