高效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实现静态搜索功能(可输入搜索文字)
Mar 28 jQuery
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
jQuery实现的form转json经典示例
Oct 10 jQuery
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
jQuery动态生成的元素绑定事件操作实例分析
May 04 jQuery
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
jquery添加div实现消息聊天框
Feb 08 jQuery
jquery实现进度条状态展示
Mar 26 jQuery
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
JQuery获得内容和属性方法解析
May 30 jQuery
html中两种获取标签内的值的方法
Jun 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php 过滤器实现代码
2010/08/09 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
原生JS实现天气预报
2020/06/16 Javascript
基于python的汉字转GBK码实现代码
2012/02/19 Python
python中list循环语句用法实例
2014/11/10 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python解析最简单的验证码
2016/01/07 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
初一英语教学反思
2014/01/11 职场文书
华山导游词
2015/02/03 职场文书
销售内勤岗位职责
2015/02/10 职场文书
财务人员个人工作总结
2015/02/27 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python