高效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实现瀑布流页面
Apr 11 jQuery
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
浅谈jQuery框架Ajax常用选项
Jul 08 jQuery
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
通过jQuery学习js类型判断的技巧
May 27 jQuery
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
jQuery实现可以扩展的日历
Dec 01 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP addAttribute()函数讲解
2019/02/03 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
详解在React里使用"Vuex"
2018/04/02 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
Python yield与实现方法代码分析
2018/02/06 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
Django models.py应用实现过程详解
2019/07/29 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
澳大利亚百货公司:David Jones
2018/02/08 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
关于赌博的检讨书
2014/01/08 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
个人债务授权委托书
2014/10/17 职场文书
财务审计整改报告
2014/11/06 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
大学生村官个人总结
2015/02/15 职场文书
2015年护士节慰问信
2015/03/23 职场文书
中标通知书格式
2015/04/17 职场文书
委托收款证明
2015/06/23 职场文书
文书工作总结(范文)
2019/07/11 职场文书
详细介绍python操作RabbitMq
2022/04/12 Python