高效jQuery选择器的5个技巧实例分析


Posted in jQuery onNovember 26, 2019

本文实例讲述了高效jQuery选择器的5个技巧。分享给大家供大家参考,具体如下:

顾名思义,jQuery专注于查询(queries)。库的核心允许你使用CSS选择器语法,以及通过在集合上执行函数,来查找DOM元素。

jQuery使用浏览器原生API方法获取DOM集合。现代浏览器支持getElementsByClassName, querySelector以及querySelectorAll(可以解析CSS语法)。然而,老版本的浏览器可能只提供getElementById以及getElementByTagName。在最坏的情况下,jQuery的Sizzle引擎必须解析选择器字符串来匹配元素。

下面是可以帮助你优化jQuery选择器的5点提示:

1. 尽量使用ID

HTML ID属性在每一个页面上都是唯一的,并且即使老版本的浏览器也可以非常迅速地定位一个元素:

$("#myelement");

2. 避免只使用类名称

下面的类选择器在现代浏览器中执行迅速:

$(".myclass");

不幸的是,在老版本的浏览器,比如IE6/7和Firefox 2,jQuery必须检查页面上的每一个元素来确定“myclass”是否被元素所包含。

如果通过标签名加以限定可以让选择器更加的高效,例如:

$("div.myclass");

jQuery现在可以将搜索范围限定在DIV元素。

3. 保持简单!

避免过于复杂的选择器。除非你要查找一个极其复杂的HTML文档,很少有需要使用多于2,3个修饰符的情况。

考虑下面的复杂选择器:

$("body #page:first-child article.main p#intro em");

p#intro 一定是唯一的,因而选择器可以这样简化:

$("p#intro em");

4. 从左往右增加特异性

了解一点jQuery选择器引擎的相关知识是有帮助的。查找首先从最后一个选择器开始,因此,在老版本的浏览器中,一个类似于这样的查询:

$("p#intro em");

将所有的em元素加载进一个数组。然后判断每一个节点的父元素,进而排除那些找不到p#intro父节点标签的元素。如果页面上包含数百个em标签的话,查询会变得十分的低效。

根据你的文档,查询可以通过优先使用最佳限定符来获得优化。其结果可以作为子选择器的出发点,例如:

$("em", $("p#intro")); // or
$("p#intro").find("em");

5. 避免重复选择

很少需要重复使用同样的选择器两次。下面的代码对每一个p标签都选择了3次:

$("p").css("color", "blue");
$("p").css("font-size", "1.2em");
$("p").text("Text changed!");

记住jQuery支持链式操作;多个方法可以应用于同一个集合之上。因此,同样效果的代码可以通过单一的选择器重写:

$("p").css({ "color": "blue", "font-size": "1.2em"}).text("Text changed!");

如果需要多次使用同一组元素集合,你应该将jQuery对象使用变量加以缓存,例如:

var $p = $("p");
$p.css("color", "blue");
$p.text("Text changed!");

与标准的DOM集合不同,jQuery集合并不是实时的,并且对象不会在paragraph标签从文档中新增或者移除时自动更新。你可以利用这个限制,创建DOM集合,并在需要时将其传递给jQuery函数,例如:

var p = document.getElementByTagName("p");
$(p).css("color", "blue");
// update the DOM
$(p).text("Text changed!");

原文链接:5 Tips for More Efficient jQuery Selectors

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
Jquery-data的三种用法
Apr 18 jQuery
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
jquery ajax加载数据前台渲染方式 不用for遍历的方法
Aug 09 jQuery
详解jQuery中的easyui
Sep 02 jQuery
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
jquery.pagination.js分页使用教程
Oct 23 jQuery
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 jQuery
jQuery控制input只能输入数字和两位小数的方法
May 16 jQuery
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
Jun 04 jQuery
jQuery创建折叠式菜单
Jun 15 jQuery
jQuery实现验证用户登录
Dec 10 jQuery
jQuery zTree如何改变指定节点文本样式
Oct 16 jQuery
jquery使用echarts实现有向图可视化功能示例
Nov 25 #jQuery
jQuery Raty星级评分插件使用方法实例分析
Nov 25 #jQuery
jquery 插件重新绑定的处理方法分析
Nov 23 #jQuery
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
Nov 18 #jQuery
Jquery让form表单异步提交代码实现
Nov 14 #jQuery
JQuery发送ajax请求时中文乱码问题解决
Nov 14 #jQuery
Jquery异步上传文件代码实例
Nov 13 #jQuery
You might like
用PHP读取超大文件的实例代码
2012/04/01 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
SVG实现时钟效果
2018/07/17 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
财政局长自荐信范文
2013/12/22 职场文书
小学生自我评价范文
2014/01/25 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
作风大整顿心得体会
2014/09/10 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
担保书范文
2015/01/20 职场文书
python实现双向链表原理
2022/05/25 Python