真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

jquery實(shí)現(xiàn)原理,jquery源碼實(shí)現(xiàn)原理

jQuery選擇器的工作原理和優(yōu)化分析

每次申明一個(gè)jQuery對象的時(shí)候,返回的是jQuery.prototype.init

站在用戶的角度思考問題,與客戶深入溝通,找到思茅網(wǎng)站設(shè)計(jì)與思茅網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋思茅地區(qū)。

對象,很多人就會(huì)不明白,init明明是jQuery.fn的方法啊,實(shí)際上這里不是方法,而是init的構(gòu)造函數(shù),因?yàn)閖s的prototype對象可

以實(shí)現(xiàn)繼承,加上js的對象只是引用不會(huì)是拷貝,new

jQuery,new

jQuery.fn和new

jQuery.fn.init的子對象是一樣的,只是有沒有執(zhí)行到init的不同,這里就不講原因了,等下一篇再講為什么會(huì)是這樣。

當(dāng)我們使用選擇器的時(shí)候$(selector,content),就會(huì)執(zhí)行

init(selectot,content),我們看看inti中是怎樣執(zhí)行的:

復(fù)制代碼

代碼如下:

if

(

typeof

selector

==

"string"

)

{

//正則匹配,看是不是HTML代碼或者是#id

var

match

=

quickExpr.exec(

selector

);

//沒有作為待查找的

DOM

元素集、文檔或

jQuery

對象。

//selector是#id的形式

if

(

match

(match[1]

||

!context)

)

{

//

HANDLE:

$(html)

-

$(array)

//HTML代碼,調(diào)用clean補(bǔ)全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

);//執(zhí)行完畢return

}

selector

=

[];

}

//非id的形式.在context中或者是全文查找

}

else{

return

jQuery(

context

).find(

selector

);

}

}

這里就說明只有選擇器寫成$(‘#id')的時(shí)候最快,相當(dāng)于執(zhí)行了一次

getElementById,后邊的程序就不用再執(zhí)行了。當(dāng)然往往我們需要的選擇器并不是這么簡單,比如我們需要id下的CSS為className,

有這樣的寫法$(‘#id.className')和$(‘#id').find(‘.className');這兩種寫法的執(zhí)行結(jié)果都是一樣的,比

如div

id=”id”span

class=”className”/span/div,返回的肯定都是span

class=”className”/span,但是執(zhí)行的效率是完全不一樣的。

在分析一下上邊的代碼,如果不是$(‘#id')這樣的簡單選擇器的話,都會(huì)執(zhí)行find函

數(shù),那我們再看看find到底是做用的:

復(fù)制代碼

代碼如下:

find:

function(

selector

)

{

//在當(dāng)前的對象中查找

var

elems

=

jQuery.map(this,

function(elem){

return

jQuery.find(

selector,

elem

);

});

//下邊的代碼可以忽略,只是做一些處理

//這里應(yīng)用了js的正則對象的靜態(tài)方法test

//indexOf("..")需要了解一下xpath的語法,就是判斷selector中包含父節(jié)點(diǎn)的寫法

//本意就是過濾數(shù)組的重復(fù)元素

return

this.pushStack(

/[^+]

[^+]/.test(

selector

)

||

selector.indexOf("..")

-1

?

jQuery.unique(

elems

)

:

elems

);

}

如果這樣寫$(‘#id

.className'),就會(huì)執(zhí)行到擴(kuò)展的find(‘#id

.className',document),因?yàn)楫?dāng)前的this是document的jQuery數(shù)組,那我們在看看擴(kuò)展的find他的實(shí)現(xiàn),代碼比較

多,就不列出來,總之就是從第二個(gè)參數(shù)傳遞進(jìn)行的dom第一個(gè)子節(jié)點(diǎn)開始找,遇見#比對id,遇見.比對ClassName,還有:+-等處理。

那我們要優(yōu)化,是不是就要想辦法讓第二個(gè)參數(shù)context的范圍最小,那樣遍歷是不是就很少了?

如果我們這樣寫$(‘#id').find(‘.className'),那程序只這樣執(zhí)行

的,第一次init的時(shí)候執(zhí)行一步getElementById,就return了,接著執(zhí)行

find(‘.className',divDocument),divDocument就是我們第一次選擇的是div標(biāo)簽,如果document下有很

多dom對象的時(shí)候,這次只遍歷divDocument是不是少了很多次,而且在第一次選擇id的速度也要比遍歷快的多。

現(xiàn)在大家應(yīng)該是明白了吧。就是說第一層選擇最好是ID,而是簡單選擇器,目的就是定義范圍,

提高速度,這次就說這些,選擇寫法的優(yōu)化,其他的優(yōu)化,下次再說。

jquery拖動(dòng)層的工作原理

主要分三個(gè)部分,注冊Handler的Click事件

Click事件引發(fā)是開始拖動(dòng),此時(shí)注冊Document的MouseMove事件,Move的時(shí)候修改對象的位置

松開或者ESC的時(shí)候取消移動(dòng),注銷Document的Move事件

基本上所有的DragDrop都是這么實(shí)現(xiàn)的

jQuery的getScript.fail實(shí)現(xiàn)的原理是怎樣的

jquery用AJAX讀回來代碼字符串然后用下面的代碼執(zhí)行讀取回來的script

( window.execScript || function( script ) {

window[ "eval" ].call( window, script );

} )( script );

JavaScript中Promise模式。

ajax在jquery的底層是怎么實(shí)現(xiàn)的呢?

它的底層實(shí)現(xiàn)包括下面幾個(gè)方面:1.jQuery底層在實(shí)現(xiàn)ajax功能時(shí),調(diào)用了瀏覽器中的XMLHttpRequest對象,在最新的2.0版本后,由于不考慮IE瀏覽器的支持,直接使用該對象獲取用戶請求的數(shù)據(jù),包括地址和參數(shù)等。2.它將對象打開請求地址時(shí)的相關(guān)參數(shù)封裝在相關(guān)函數(shù)如ajax()的配置項(xiàng)中,一旦傳入了必需選項(xiàng),則直接調(diào)用相應(yīng)的send()方法進(jìn)行數(shù)據(jù)的請求。3.jQuery底層將對象請求后返回的數(shù)據(jù)結(jié)果,直接封裝到相關(guān)函數(shù)的success方法中,所以,一旦異步請求成功,返回的數(shù)據(jù)對象直接注入到方法中,因此,可以調(diào)用success方法獲取服務(wù)端返回的數(shù)據(jù)。我之前在黑馬程序員的免費(fèi)視頻中看到過ajax和jQuery的相關(guān)視頻,講的都還挺不錯(cuò)的。


新聞名稱:jquery實(shí)現(xiàn)原理,jquery源碼實(shí)現(xiàn)原理
分享URL:http://weahome.cn/article/hosohp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部