1. jQuery 里面有很多東西是出于兼容性,歷史遺留。
成都網站設計、成都網站建設介紹好的網站是理念、設計和技術的結合。創(chuàng)新互聯(lián)擁有的網站設計理念、多方位的設計風格、經驗豐富的設計團隊。提供PC端+手機端網站建設,用營銷思維進行網站設計、采用先進技術開源代碼、注重用戶體驗與SEO基礎,將技術與創(chuàng)意整合到網站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
比如 .ready() 之類的函數,為什么會很scroll 有關,那是為了兼容某些ie。這種代碼對于編程思想來說不僅沒用,而且是雜音,你要篩選出來就得了解這段代碼的變動,費心費力得不償失。
2. jQuery 里面的代碼不一定是最優(yōu)的,例如事件委托,每一次事件觸發(fā)都要調用選擇器,實際上是效率很低的。但是我又比較懶,沒有提交patch。
3. jQuery 實際上很容易寫出來一個 barebone alternative,在使用的過程中多想,多思考多總結就可以了。
4. jQuery 這類框架里真正有思維挑戰(zhàn)性的東西不多,一半以上是堆代碼而已,剩下的一點價值在于架構、抽象、擴展能力。
5. 我有一句話與所有的同行分享:工程師讓需求成為現實,優(yōu)秀工程師化復雜為簡單,頂尖工程師變不可能為可能;架構師掌握現在,優(yōu)秀架構師展望未來,頂尖架構師創(chuàng)造時代。
jQuery 的設計目的是,讓前端工程師的工作更簡單更輕松,但它并不適合所有的前端工程師,假如你的目標是成為優(yōu)秀架構師、頂尖架構師的話,你在jQuery里也看不清未來。
quickExpr應該是個二義正則。前半段是:
^[^]*([\w\W]+)[^]*$:我猜測意思是一個簡單的標簽。如$('divnew Div/div')匹配的用法。
后半段是:
^#([\w-]+)$:這個顯然就是id選擇器。-getElementById
注意兩個正則用了|來分隔二義,所以你這里的匹配不成功是正常的。
jquery應該是根據這個quickExpr來判斷
if(match[1]) createNewfragment();....
else if(match[2]) getElementById();
當然這只是個人猜測,沒有細讀jquery源碼。僅做參考
復制代碼
代碼如下:
//
args
is
for
internal
usage
only
each:
function(
object,
callback,
args
)
{
var
name,
i
=
0,
length
=
object.length,
isObj
=
length
===
undefined
||
jQuery.isFunction(object);
if
(
args
)
{
if
(
isObj
)
{
for
(
name
in
object
)
{
if
(
callback.apply(
object[
name
],
args
)
===
false
)
{
break;
}
}
}
else
{
for
(
;
i
length;
)
{
if
(
callback.apply(
object[
i++
],
args
)
===
false
)
{
break;
}
}
}
//
A
special,
fast,
case
for
the
most
common
use
of
each
}
else
{
if
(
isObj
)
{
for
(
name
in
object
)
{
if
(
callback.call(
object[
name
],
name,
object[
name
]
)
===
false
)
{
break;
}
}
}
else
{
for
(
var
value
=
object[0];
i
length
callback.call(
value,
i,
value
)
!==
false;
value
=
object[++i]
)
{}
}
}
return
object;
},
分析:jquery文檔說
each(callback)作用是以每一個匹配的元素作為上下文來執(zhí)行一個函數。就是用each來遍歷數組,來執(zhí)行同一個方法
這個方法的實現最關鍵的是:call與apply的用法:call(apply)就是將函數的對象的從初始的上下文改為thisObj指向的對象,
就是說用thisObj來代替原來的對象來執(zhí)行方法:call與apply的第一個參數為this指向的對象,而后面的參數都下傳給函數的,
call傳給函數的參數用逗號分隔而apply則為一個數組。
//1.callback.apply(
object[
name
],
args
)
//2.callback.call(
object[
name
],
name,
object[
name
]
)
filter()過濾DOM元素包裝集,是指操作當前元素集,刪除不匹配的元素,得到一個新的集合
$('div').filter('.div1');//選擇div標簽中class屬性為div1的div元素
find()在當前選中元素的上下文中找到符合條件的后代,返回的是子元素
$('div').find('em');//選擇div標簽中的em標簽的元素
filter()是對選中的元素集合操作,得到這些元素中符合條件的元素,而find()是得到選中元素 中符合條件的后代子元素。