每次申明一個jQuery對象的時候,返回的是jQuery.prototype.init
柳州網站制作公司哪家好,找創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設等網站項目制作,到程序開發,運營維護。創新互聯公司從2013年成立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯公司。
對象,很多人就會不明白,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,而是簡單選擇器,目的就是定義范圍,
提高速度,這次就說這些,選擇寫法的優化,其他的優化,下次再說。
通過高度變化(向上減?。﹣韯討B地隱藏所有匹配的元素,在隱藏完成后可選地觸發一個回調函數。
沒有slide()這個方法
就是初始化的。
從return
new
jQuery.fn.init(
selector,
context,
rootjQuery
)中可以看出
參數selector和context是來自我們在調用jQuery方法時傳過來的.
將這些key對應的value持久化到磁盤中,同時在內存中清除。
這種特性使得Redis可以保持超過其機器本身內存大小的數據。
當然,機器本身的內存必須要能夠保持所有的key,畢竟這些數據是不會進行swap操作的。
分享標題:jquerynew的簡單介紹
網頁鏈接:http://vcdvsql.cn/article20/dsiiojo.html
成都網站建設公司_創新互聯,為您提供外貿建站、網站改版、外貿網站建設、網站營銷、移動網站建設、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯