高效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实现图片轮播器
May 23 jQuery
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
JS文件中加载jquery.js的实例代码
May 05 jQuery
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
Dec 10 jQuery
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
jQuery操作动画完整实例分析
Jan 10 jQuery
jQuery实现的移动端图片缩放功能组件示例
May 01 jQuery
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 jQuery
jQuery实现广告显示和隐藏动画
Jul 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php5中类的学习
2008/03/28 PHP
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
PHP header函数分析详解
2011/08/06 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python对字典进行排序实例
2014/09/25 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
django 发送手机验证码的示例代码
2018/04/25 Python
使用python实现kNN分类算法
2019/10/16 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
北承题目(C++)
2012/05/16 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
应届本科生推荐信范文
2013/12/25 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
打架检讨书300字
2014/02/02 职场文书
全神贯注教学反思
2014/02/03 职场文书
家长写给孩子的评语
2014/04/18 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
大学生敬老院活动总结
2015/05/07 职场文书