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 相关文章推荐
FLASH 广告之外的链接
Dec 16 Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
jquery显示隐藏input对象
Jul 21 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
jQuery stop()用法实例详解
Jul 28 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
May 27 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)
2010/09/04 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
浅谈javascript的数据类型检测
2010/07/10 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
Python帮你识破双11的套路
2019/11/11 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
会计专业推荐信
2013/10/29 职场文书
单位人事专员介绍信
2014/01/11 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
毕业生入职感言
2015/07/31 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle