高效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插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
Apr 11 jQuery
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
jQuery导航条固定定位效果实例代码
May 26 jQuery
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
JS和jQuery通过this获取html标签中的属性值(实例代码)
Sep 11 jQuery
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
JQueryDOM之样式操作
Mar 27 jQuery
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
jQuery Raty星级评分插件使用方法实例分析
Nov 25 jQuery
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
jQuery中event.target和this的区别详解
Aug 13 jQuery
jQuery实现评论模块
Aug 19 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读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php 伪静态之IIS篇
2014/06/02 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
Python正则表达式完全指南
2017/05/25 Python
Python编写登陆接口的方法
2017/07/10 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
numpy库reshape用法详解
2020/04/19 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
应届大专毕业生个人自荐信
2013/09/22 职场文书
求职推荐信范文
2013/12/01 职场文书