高效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 EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
jquery ajax 请求小技巧实例分析
Nov 11 jQuery
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
JQuery表单元素取值赋值方法总结
May 12 jQuery
jquery更改元素属性attr()方法操作示例
May 22 jQuery
JQuery+drag.js上传图片并且实现图片拖曳
Nov 18 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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
python打开文件并获取文件相关属性的方法
2015/04/23 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python3 读写文件换行符的方法
2018/04/09 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python Collatz序列实现过程解析
2019/10/12 Python
初学者学习Python好还是Java好
2020/05/26 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
linux面试相关问题
2013/04/28 面试题
有关爱国演讲稿
2014/05/07 职场文书
摄影展策划方案
2014/06/02 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
热血教师观后感
2015/06/10 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android
Redis高并发缓存架构性能优化
2022/05/15 Redis