jQuery選擇器的工作原理和優化

2021-03-04 09:21:06 字數 1358 閱讀 1061

至於有那些選擇器,在幫助手冊中都有,自己去看,這篇主要是分析他的工作原理,而優化我們寫的選擇器,尤其在頁面內容很多的情況下,更應該需要優化。下邊就言歸正傳。

每次申明乙個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" )

這裡就說明只有選擇器寫成$(『#id』)的時候最快,相當於執行了一次 getelementbyid,後邊的程式就不用再執行了。當然往往我們需要的選擇器並不是這麼簡單,比如我們需要id下的css為classname, 有這樣的寫法$(『#id.classname』)和$(『#id』).

find(『.classname』);這兩種寫法的執行結果都是一樣的,比如

,返回的肯定都是,但是執行的效率是完全不一樣的。

在分析一下上邊的**,如果不是$(『#id』)這樣的簡單選擇器的話,都會執行find函式,那我們再看看find到底是做用的:

find: function( selector )

如果這樣寫$(『#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,而是簡單選擇器,目的就是定義範圍, 提高速度,這次就說這些,選擇寫法的優化,其他的優化,下次再說。

斷路器的結構和工作原理

低壓斷路器俗稱自動開關或空氣開關,用於低壓配電電路中不頻繁的通斷控制。在電路發生短路 過載或欠電壓等故障時能自動分斷故障電路,是一種控制兼保護電器。斷路器的種類繁多,按其用途和結構特點可分為dw型框架式斷路器 dz型塑料外殼式斷路器 ds型直流快速斷路器和dwx型 dwz型限流式斷路器等。框架式斷路...

變壓器的構造和工作原理

教學課題 第一節變壓器的結構和額定值 教學目標 1 掌握變壓器的基本構造和額定值 2 理解變壓器的額定值的含義。教學重點與難點 掌握變壓器的基本構造和額定值 教學方法 講授法 指導練習 輔助教具 ppt課件 教學時間 2課時 教學過程 一 複習提問 1 什麼是電磁感應?2 試敘述法拉弟電磁感應定律?...

抽氣器工作原理和結構

2點截面 3點截面為工作蒸汽與被抽吸氣體的混合階段。工作蒸汽在工作噴嘴出口截面處所形成的高速汽流會在工作噴嘴出口附近形成真空區域,這樣壓力相對較高的被抽吸氣體就會在壓力差的作用下,被吸入到混合室內。被抽吸氣體在e點被吸入抽氣器,從e點流動到3點的過程中,速度不斷增加,壓力在e點 2點段不斷下降到工作...