至于有那些选择器,在帮助手册中都有,自己去看,这篇主要是分析他的工作原理,而优化我们写的选择器,尤其在页面内容很多的情况下,更应该需要优化。下边就言归正传。
每次申明一个jQuery对象的时候,返回的是jQuery.prototype.init对象,很多人就会不明白,init明明是jQuery.fn的方法啊,实际上这里不是方法,而是init的构造函数,因为js的prototype对象可以实现继承,加上js的对象只是引用不会是拷贝,new jQuery,new jQuery.fn和new jQuery.fn.init的子对象是一样的,只是有没有执行到init的不同,这里就不讲原因了,等下一篇再讲为什么会是这样。
当我们使用选择器的时候$(selector,content),就会执行init(selectot,content),我们看看inti中是怎样执行的:
if ( typeof selector == "string" ) {
//正则匹配,看是不是HTML代码或者是#id
var match = quickExpr.exec( selector );
//没有作为待查找的 DOM 元素集、文档或 jQuery 对象。
//selector是#id的形式
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
//HTML代码,调用clean补全HTML代码
if ( match[1] ){
selector = jQuery.clean( [ match[1] ], context );
}
// 是: $("#id")
else {
//判断id的Dom是不是加载完成
var elem = document.getElementById( match[3] );
if ( elem ){
if ( elem.id != match[3] )
return jQuery().find( selector );
return jQuery( elem );//执行完毕return
}
selector = [];
}
//非id的形式.在context中或者是全文查找
} else{
return jQuery( context ).find( selector );
}
}
这里就说明只有选择器写成$(‘#id’)的时候最快,相当于执行了一次getElementById,后边的程序就不用再执行了。当然往往我们需要的选择器并不是这么简单,比如我们需要id下的CSS为className,有这样的写法$(‘#id.className’)和$(‘#id’).find(‘.className’);这两种写法的执行结果都是一样的,比如<div id=”id”><span class=”className”></span></div>,返回的肯定都是<span class=”className”></span>,但是执行的效率是完全不一样的。
在分析一下上边的代码,如果不是$(‘#id’)这样的简单选择器的话,都会执行find函数,那我们再看看find到底是做用的:
find: function( selector ) {
//在当前的对象中查找
var elems = jQuery.map(this, function(elem){
return jQuery.find( selector, elem );
});
//下边的代码可以忽略,只是做一些处理
//这里应用了js的正则对象的静态方法test
//indexOf("..")需要了解一下xpath的语法,就是判断selector中包含父节点的写法
//本意就是过滤数组的重复元素
return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
jQuery.unique( elems ) :
elems );
}
如果这样写$(‘#id .className’),就会执行到扩展的find(‘#id .className’,document),因为当前的this是document的jQuery数组,那我们在看看扩展的find他的实现,代码比较多,就不列出来,总之就是从第二个参数传递进行的dom第一个子节点开始找,遇见#比对id,遇见.比对ClassName,还有:<+-等处理。那我们要优化,是不是就要想办法让第二个参数context的范围最小,那样遍历是不是就很少了?
如果我们这样写$(‘#id’).find(‘.className’),那程序只这样执行的,第一次init的时候执行一步getElementById,就return了,接着执行find(‘.className’,divDocument),divDocument就是我们第一次选择的是div标签,如果document下有很多dom对象的时候,这次只遍历divDocument是不是少了很多次,而且在第一次选择id的速度也要比遍历快的多。
现在大家应该是明白了吧。就是说第一层选择最好是ID,而是简单选择器,目的就是定义范围,提高速度,这次就说这些,选择写法的优化,其他的优化,下次再说。
分享到:
相关推荐
本文将深入探讨jQuery的工作原理,帮助你更好地理解和运用这个工具。 ### 1. DOM操作 jQuery的核心在于对DOM(Document Object Model)的操作。DOM是HTML和XML文档的结构化表示,jQuery通过选择器机制快速找到DOM...
jQuery选择器是jQuery库的核心部分,它用于在DOM树中高效地...理解jQuery选择器的工作原理并对其进行优化,可以显著提高页面加载速度和用户交互体验。在编写jQuery代码时,应始终考虑性能,选择最高效的选择器和方法。
深入学习 jQuery API,了解每个方法的工作原理,避免使用效率低下的方法。熟悉插件和扩展,根据需求选择最适合的工具。 通过以上策略,可以有效地优化 jQuery 代码,提升页面性能。在开发过程中,应持续关注性能...
接下来,我们将详细探讨jQuery时间选择器的工作原理、实现方式以及如何在实际项目中应用。 ### jQuery时间选择器的基本概念 jQuery时间选择器是基于流行的JavaScript库jQuery构建的,它的主要目标是简化用户在网页...
**jQuery工作原理** jQuery是一个广泛使用的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画制作和Ajax交互。...同时,熟悉源代码有助于理解jQuery底层的实现,从而更好地进行性能优化和问题排查。
《jQuery城市选择器详解》 ...理解其工作原理,并结合实际项目需求进行优化,能有效提升网站的用户体验和交互性。随着前端技术的不断发展,未来城市选择器可能会有更多创新的实现方式和功能拓展。
总之,理解jQuery选择器的工作方式,关注其版本更新中的修复和改进,以及熟练使用开发者工具,都是应对jQuery选择器Bug的关键。在实际开发过程中,我们需要持续学习和适应,以确保我们的代码能够稳定、高效地运行。
在这个场景下,“jQuery移动端日期选择代码”就是一个专门针对手机和平板等触摸设备优化的日期选择工具。这个压缩包“jQuery移动端日期选择代码.zip”包含了实现这一功能所需的所有资源。 jQuery是一款广泛使用的...
通过阅读和理解这段源码,开发者不仅可以学习到jQuery选择器的工作原理,还能提升对CSS选择器、DOM操作以及JavaScript性能优化的理解。 总结来说,这个"jquery样式选择器插件"是一个浓缩的精华,它展示了如何用最少...
《jQuery城市选择器详解》 ...理解其工作原理和使用方法,可以帮助开发者更好地服务于用户,提升网站的可用性和满意度。在实际开发中,灵活运用并不断优化,可以创造出更高效、更具人性化的城市选择体验。
一、jQuery颜色选择插件的基本原理 jQuery颜色选择插件是通过JavaScript和CSS来实现的,它通常包含以下几个核心部分: 1. 用户界面:这是用户与颜色选择器进行交互的部分,通常设计为一个调色板,允许用户点击或...
开发者可以在这个文件中查看并理解插件的工作原理,进行进一步的自定义和调试。 3. `jquery.date_input.min.js`:这是经过压缩和优化的版本,适用于生产环境,它减小了文件大小,加快了页面加载速度,但不适合直接...
8. **兼容性和性能优化**:为了确保在各种浏览器上都能正常工作,需要考虑浏览器的兼容性问题。同时,为了提高性能,避免在每次滚动时都计算大量DOM元素,可以使用事件委托、节流或防抖技术。 总的来说,jQuery无缝...
接下来,我们要了解jQuery颜色选择器的实现原理。这个插件的核心在于JavaScript和CSS,它们共同构建了颜色选择器的交互逻辑和视觉样式。JavaScript部分负责监听用户的操作,更新颜色选择状态,并与HTML元素进行交互...
其提供的源码使得开发者可以深入理解其工作原理,并根据自身项目需求进行定制化改造。通过下载并实践这个控件,我们可以学习到如何使用jQuery实现高效、美观的用户界面元素,提升网站的整体用户体验。
【基于jQuery实现的地址选择器】是一种常用的前端交互组件,常用于用户在填写表单时选择他们的居住地或发货地址。...通过理解和掌握其工作原理及使用方法,开发者可以更好地集成到自己的项目中,为用户提供更好的体验。
在移动应用开发中,用户界面的设计与交互是至关重要的,特别是在有限的屏幕空间上提供高效、易用的组件。...为了实现最佳效果,开发者应仔细研究这些示例,理解其工作原理,并根据具体需求进行适当的定制和调整。
本文将深入探讨基于jQuery的日期选择器插件的原理、使用方法以及相关的编程技巧。 ### 一、jQuery库的引入 在使用任何jQuery插件之前,首先要在页面中引入jQuery库。这是因为jQuery库提供了丰富的DOM操作和事件...
4. **用户体验优化**:为了提升用户体验,插件可能还包含搜索功能,用户可以通过输入关键字快速找到目标城市,这就需要用到jQuery的事件监听和文本匹配算法。 5. **样式自定义**:为了让下拉菜单更符合网站风格,...