`

jQuery选择的工作原理和优化

阅读更多

至于有那些选择器,在帮助手册中都有,自己去看,这篇主要是分析他的工作原理,而优化我们写的选择器,尤其在页面内容很多的情况下,更应该需要优化。下边就言归正传。

每次申明一个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工作原理

    本文将深入探讨jQuery的工作原理,帮助你更好地理解和运用这个工具。 ### 1. DOM操作 jQuery的核心在于对DOM(Document Object Model)的操作。DOM是HTML和XML文档的结构化表示,jQuery通过选择器机制快速找到DOM...

    jQuery选择器的工作原理和优化分析

    jQuery选择器是jQuery库的核心部分,它用于在DOM树中高效地...理解jQuery选择器的工作原理并对其进行优化,可以显著提高页面加载速度和用户交互体验。在编写jQuery代码时,应始终考虑性能,选择最高效的选择器和方法。

    jQuery优化

    深入学习 jQuery API,了解每个方法的工作原理,避免使用效率低下的方法。熟悉插件和扩展,根据需求选择最适合的工具。 通过以上策略,可以有效地优化 jQuery 代码,提升页面性能。在开发过程中,应持续关注性能...

    jQuery时间选择器点击选择小时分钟代码

    接下来,我们将详细探讨jQuery时间选择器的工作原理、实现方式以及如何在实际项目中应用。 ### jQuery时间选择器的基本概念 jQuery时间选择器是基于流行的JavaScript库jQuery构建的,它的主要目标是简化用户在网页...

    jquery 工作原理及源代码示列

    **jQuery工作原理** jQuery是一个广泛使用的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画制作和Ajax交互。...同时,熟悉源代码有助于理解jQuery底层的实现,从而更好地进行性能优化和问题排查。

    jquery 城市选择器

    《jQuery城市选择器详解》 ...理解其工作原理,并结合实际项目需求进行优化,能有效提升网站的用户体验和交互性。随着前端技术的不断发展,未来城市选择器可能会有更多创新的实现方式和功能拓展。

    jQuery选择器的一个Bug

    总之,理解jQuery选择器的工作方式,关注其版本更新中的修复和改进,以及熟练使用开发者工具,都是应对jQuery选择器Bug的关键。在实际开发过程中,我们需要持续学习和适应,以确保我们的代码能够稳定、高效地运行。

    jQuery移动端日期选择代码.zip

    在这个场景下,“jQuery移动端日期选择代码”就是一个专门针对手机和平板等触摸设备优化的日期选择工具。这个压缩包“jQuery移动端日期选择代码.zip”包含了实现这一功能所需的所有资源。 jQuery是一款广泛使用的...

    jquery样式选择器插件源码demo

    通过阅读和理解这段源码,开发者不仅可以学习到jQuery选择器的工作原理,还能提升对CSS选择器、DOM操作以及JavaScript性能优化的理解。 总结来说,这个"jquery样式选择器插件"是一个浓缩的精华,它展示了如何用最少...

    jquery城市选择器

    《jQuery城市选择器详解》 ...理解其工作原理和使用方法,可以帮助开发者更好地服务于用户,提升网站的可用性和满意度。在实际开发中,灵活运用并不断优化,可以创造出更高效、更具人性化的城市选择体验。

    jquery颜色选择插件

    一、jQuery颜色选择插件的基本原理 jQuery颜色选择插件是通过JavaScript和CSS来实现的,它通常包含以下几个核心部分: 1. 用户界面:这是用户与颜色选择器进行交互的部分,通常设计为一个调色板,允许用户点击或...

    jquery日期控件(有下拉菜单选择年份)

    开发者可以在这个文件中查看并理解插件的工作原理,进行进一步的自定义和调试。 3. `jquery.date_input.min.js`:这是经过压缩和优化的版本,适用于生产环境,它减小了文件大小,加快了页面加载速度,但不适合直接...

    jQuery无缝滚动原理分析

    8. **兼容性和性能优化**:为了确保在各种浏览器上都能正常工作,需要考虑浏览器的兼容性问题。同时,为了提高性能,避免在每次滚动时都计算大量DOM元素,可以使用事件委托、节流或防抖技术。 总的来说,jQuery无缝...

    jquery颜色选择器源码

    接下来,我们要了解jQuery颜色选择器的实现原理。这个插件的核心在于JavaScript和CSS,它们共同构建了颜色选择器的交互逻辑和视觉样式。JavaScript部分负责监听用户的操作,更新颜色选择状态,并与HTML元素进行交互...

    很炫,很简洁,很好用的 jquery选择地区控件 (源码)

    其提供的源码使得开发者可以深入理解其工作原理,并根据自身项目需求进行定制化改造。通过下载并实践这个控件,我们可以学习到如何使用jQuery实现高效、美观的用户界面元素,提升网站的整体用户体验。

    基于jquery实现的地址选择器

    【基于jQuery实现的地址选择器】是一种常用的前端交互组件,常用于用户在填写表单时选择他们的居住地或发货地址。...通过理解和掌握其工作原理及使用方法,开发者可以更好地集成到自己的项目中,为用户提供更好的体验。

    jQuerymobile 滑动选择时间

    在移动应用开发中,用户界面的设计与交互是至关重要的,特别是在有限的屏幕空间上提供高效、易用的组件。...为了实现最佳效果,开发者应仔细研究这些示例,理解其工作原理,并根据具体需求进行适当的定制和调整。

    jQuery日期选择器插件

    本文将深入探讨基于jQuery的日期选择器插件的原理、使用方法以及相关的编程技巧。 ### 一、jQuery库的引入 在使用任何jQuery插件之前,首先要在页面中引入jQuery库。这是因为jQuery库提供了丰富的DOM操作和事件...

    jquery下拉选择城市插件

    4. **用户体验优化**:为了提升用户体验,插件可能还包含搜索功能,用户可以通过输入关键字快速找到目标城市,这就需要用到jQuery的事件监听和文本匹配算法。 5. **样式自定义**:为了让下拉菜单更符合网站风格,...

Global site tag (gtag.js) - Google Analytics