高效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插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
JQuery元素快速查找与操作
Apr 22 jQuery
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 jQuery
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
Jquery让form表单异步提交代码实现
Nov 14 jQuery
jQuery实现轮播图效果
Nov 26 jQuery
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
jquery实现淡入淡出轮播图效果
Dec 13 jQuery
jQuery实现鼠标拖动图片功能
Mar 04 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程序中的常见漏洞进行攻击
2006/10/09 PHP
杏林同学录(七)
2006/10/09 PHP
PHP技术开发技巧分享
2010/03/23 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
js查找节点的方法小结
2015/01/13 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
高分子材料与工程专业推荐信
2013/12/01 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
员工入职担保书范文
2014/04/01 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
利用python做表格数据处理
2021/04/13 Python
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
Oracle 多表查询基本语法实例
2022/04/18 Oracle
如何利用python创作字符画
2022/06/25 Python