-
Math.max(0, startTime + options.duration - createTime()) 過(guò)濾出數(shù)組最大值
+new Date 時(shí)間戳
查看全部 -
onceRun =?
function(func) {
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? makeAnim(element, options, func);
? ? ? ? ? ? ? ? }
func =?
function() {
? ? ? ? ? ? ? ? ? ? ? ? fireing = false;
? ? ? ? ? ? ? ? ? ? ? ? _fire();
? ? ? ? ? ? ? ? ? ? }
查看全部 -
在 ajax 請(qǐng)求中類(lèi)型如果是 type 是 post,其實(shí)內(nèi)部都只會(huì)用 get,因?yàn)槠淇缬虻脑砭褪怯玫膭?dòng)態(tài)加載 script 的 src,所以我們只能把參數(shù)通過(guò) url 的方式傳遞
我們使用了 dataType 是 'jsonp' 但是 jquery 內(nèi)部有進(jìn)一步的優(yōu)化,如果探測(cè)到還是同域下的請(qǐng)求,依然還是用 XmlHttpRequest 處理,所以我們?cè)谕蛳聹y(cè)試的話(huà),可以把 crossDomain 選項(xiàng)置為 true,這樣強(qiáng)制為跨域處理,這樣就會(huì)通過(guò) script 處理了
查看全部 -
jsonp: "callback", //傳遞給請(qǐng)求處理程序或頁(yè)面的,用以獲得jsonp回調(diào)函數(shù)名的 參數(shù)名(一般默認(rèn)為:callback)
? ? jsonpCallback: "Handler", //自定義的jsonp回調(diào)函數(shù)名稱(chēng),默認(rèn)為jQuery自動(dòng)生成的隨機(jī)函數(shù)名,也可以寫(xiě)"?",jQuery會(huì)自動(dòng)為你處理數(shù)據(jù)
查看全部 -
如果 on 中傳入?yún)?shù) selector ,意味著就是有委托的處理,那么我們就需要用一個(gè)標(biāo)記來(lái)記錄下這個(gè)元素到底委托了多少次。
查看全部 -
event 對(duì)象的屬性和方法包含了當(dāng)前事件的狀態(tài)。
當(dāng)前事件,是指正在發(fā)生的事件;狀態(tài),是與事件有關(guān)的性質(zhì),如引發(fā)事件的?DOM?元素、鼠標(biāo)的狀態(tài)、按下的鍵等等。
?
如上結(jié)構(gòu),currentTarget 是 aaron 的 div 元素 , target 是 p 元素,事件對(duì)象是有作用域的 currentTarget 是等于 this 的。
e.stopImmediatePropagation 方法不僅阻止了一個(gè)事件的冒泡,也把這個(gè)元素上的其他綁定事件也阻止了。
事件對(duì)象提供了 preventDefault,stopPropagation2 個(gè)方法一個(gè)停止事件傳播,一個(gè)傳遞默認(rèn)的行為(暫且無(wú)視IE),
查看全部 -
在下列情況下,應(yīng)該使用 .live()或 .delegate(),而不能使用 .bind():
1.?為DOM中的很多元素綁定相同事件; 2.?為DOM中尚不存在的元素綁定事件; 3.?用.bind()的代價(jià)是非常大的,它會(huì)把相同的一個(gè)事件處理程序hook到所有匹配的DOM元素上 4.?不要再用.live()了,它已經(jīng)不再被推薦了,而且還有許多問(wèn)題 5.?.delegate()會(huì)提供很好的方法來(lái)提高效率,同時(shí)我們可以添加一事件處理方法到動(dòng)態(tài)添加的元素上
我們可以用 .on() 來(lái)代替上述的 3 種方法。
不足點(diǎn)也是有的:
1.?并非所有的事件都能冒泡,如load,?change,?submit,?focus,?blur 2.?加大管理復(fù)雜 3.?不好模擬用戶(hù)觸發(fā)事件 4.?如何取舍就看項(xiàng)目實(shí)際中運(yùn)用了
?.bind() 綁定事件的時(shí)候這些元素必須已經(jīng)存在,很明顯就是直接調(diào)用沒(méi)利用委托機(jī)制,如下:
問(wèn):單擊ddddd,會(huì)在最上面顯示sdfsdf,但我單擊sdfsdf后,并沒(méi)有顯示“on觸發(fā)”,是因?yàn)閛n不能綁定動(dòng)態(tài)添加的元素嗎?
<body>
? <p>on,click,delegate</p>
? <h2>ddddd</h2>
? <span></span
<script>
$("h2").on("click",function(){
? ? $("p:first").before(" <h3>sdfsdf</h3>");
})
$("h3").on("click", function(){
? ? $("span").append("on觸發(fā)! ");
});
答:on支持動(dòng)態(tài)綁定,只不過(guò)需要綁定到父級(jí)元素上。(使用委托機(jī)制)
<script>
$("h2").on("click",function(){
$("p:first").before(" <h3>sdfsdf</h3>");
})
$("body").on("click","h3", function(){
??? $("span").append("on觸發(fā)! ");
});
?</script>
查看全部 -
jQuery不支持獲取隱藏元素的偏移坐標(biāo)。同樣的,也無(wú)法取得隱藏元素的 border, margin, 或 padding 信息
查看全部 -
cloneNode不會(huì)復(fù)制javascript屬性,比如事件,這個(gè)方法只會(huì)復(fù)制特性。當(dāng)然IE有這個(gè)BUG它會(huì)復(fù)制事件處理程序。cloneNode(a)方法接受一個(gè)布爾值參數(shù),表示是否深拷貝。
true:表示執(zhí)行深拷貝,復(fù)制本節(jié)點(diǎn)以及整個(gè)子節(jié)點(diǎn)樹(shù)。
false:淺拷貝,只復(fù)制節(jié)點(diǎn)本身。
復(fù)制后返回的節(jié)點(diǎn)副本屬于文檔所有,但是并沒(méi)有父節(jié)點(diǎn)。除非使用 appendChild,insertChild(),replaceChild()將它添加到文檔。
cloneNode(true)的時(shí)候是遍歷的節(jié)點(diǎn),但是不會(huì)把對(duì)應(yīng)的事件與數(shù)據(jù)給復(fù)制,但是jQuery.clone方法克隆的時(shí)候,是會(huì)把該節(jié)點(diǎn)上的事件與數(shù)據(jù)給一并復(fù)制過(guò)去的,這樣的機(jī)制是建立在數(shù)據(jù)分離的基礎(chǔ)上。
查看全部 -
移除 涉及節(jié)點(diǎn)刪除的接口jQuery劃分了四個(gè)分別是detach,empty,remove,unwrap,因?yàn)槭褂玫姆秶煌?,所以功能有所差異,但是總的?lái)說(shuō)都是用來(lái)清理節(jié)點(diǎn)的。?
.empty() 從DOM中移除集合中匹配元素的所有子節(jié)點(diǎn),為了避免內(nèi)存泄漏,jQuery先移除子元素的數(shù)據(jù)和事件處理函數(shù),然后移除子元素。?
.remove() 將元素移出DOM,當(dāng)我們想將元素自身移除時(shí)我們用 .remove(),同時(shí)也會(huì)移除元素內(nèi)部的一切,包括綁定的事件及與該元素相關(guān)的jQuery數(shù)據(jù)。remove是empty的加強(qiáng)版,把本身的父節(jié)點(diǎn)也清除掉了。因?yàn)閞emove支持過(guò)濾器所以支持傳遞selecor。remove需要?jiǎng)h除自身及其所有的子元素包括事件與數(shù)據(jù),所以要通過(guò)找到父節(jié)點(diǎn)parnetNode移除。?
.detach() 如果你想刪除元素,不破壞他們的數(shù)據(jù)或事件處理程序(這些綁定的信息還可以在之后被重新添加回來(lái))。.detach() 方法和.remove()一樣, 除了 .detach()保存所有jQuery數(shù)據(jù)和被移走的元素相關(guān)聯(lián)。當(dāng)需要移走一個(gè)元素,不久又將該元素插入DOM時(shí),這種方法很有用。
innerText是我們常用的文本清理方法,但是火狐下不兼容,不過(guò)會(huì)提供一個(gè)類(lèi)似的方法叫textContent。
查看全部 -
在所有節(jié)點(diǎn)類(lèi)型中,只有DocumentFragment在文檔中沒(méi)有對(duì)應(yīng)的標(biāo)記。DOM規(guī)定文檔片段(documentfragment)是一種“輕量級(jí)”的文檔,可以包含和控制節(jié)點(diǎn),但不會(huì)像完整的文檔那樣占用額外資源。
即當(dāng)請(qǐng)求把一個(gè) DocumentFragment 節(jié)點(diǎn)插入文檔樹(shù)時(shí),插入的不是 DocumentFragment 自身,而是它的所有子孫節(jié)點(diǎn)。
查看全部 -
jQuery在節(jié)點(diǎn)操作上使用了innerHTML,創(chuàng)建效率上來(lái)說(shuō)至少比createElement快了2-10倍不等,而且還能一次性生成一堆的節(jié)點(diǎn),但是隨之而來(lái)就有一些兼容性問(wèn)題,
我總結(jié)了有以下幾點(diǎn),當(dāng)然兼容上也結(jié)合了jQuery的解決方案。
? IE會(huì)對(duì)用戶(hù)字符串進(jìn)行trimLeft操作,用戶(hù)可能的本意就是需要空白
? IE8有些元素innerHTML是只讀
? IE會(huì)忽略開(kāi)頭的無(wú)作用域元素
? 大多情況下不執(zhí)行script腳本,當(dāng)然如果支持defer的IE9之前的瀏覽器除外
? 一些標(biāo)簽不能作為div的子元素,如tr,tb, col等
jQuery的節(jié)點(diǎn)操作最終是需要轉(zhuǎn)化成文檔碎片也就是要通過(guò)buildFragment()方法處理的,所以innerHTML兼容的修復(fù)也自然在buildFragment方法中。
查看全部 -
dffkklglg
查看全部 -
jjdkdkkdkd
查看全部 -
來(lái)來(lái)來(lái)擴(kuò)擴(kuò)擴(kuò)擴(kuò)
查看全部 -
jquery 源碼查看全部
-
?jQuery.each({
? ? parent: function(elem) {
? ? ? var parent = elem.parentNode;
? ? ? return parent && parent.nodeType !== 11 ? parent : null;
? ? },
? ? parents: function(elem) {
? ? ? return dir(elem, "parentNode");
? ? },
? ? parentsUntil: function(elem, until) {
? ? ? return dir(elem, "parentNode", until);
? ? }
? }, function(name, fn) {
? ? ajQuery[name] = function(until, selector) {
? ? ? return? fn(until, selector);
? ? };
? });
查看全部 -
接口抽象合并查看全部
-
針對(duì)節(jié)點(diǎn)的操作有幾個(gè)重點(diǎn)的細(xì)節(jié):
保證最終操作的永遠(yuǎn)是dom元素,瀏覽器的最終API只認(rèn)識(shí)那么幾個(gè)接口,所以如果傳遞是字符串或者其他的,當(dāng)然需要轉(zhuǎn)換
針對(duì)節(jié)點(diǎn)的大量操作,我們肯定是需要引入文檔碎片做優(yōu)化的,這個(gè)必不可少
我們知道jQuery的的接口是支持多種參數(shù)傳遞的,那么就需要有一個(gè)過(guò)濾器的中介來(lái)處理各種參數(shù)類(lèi)型。
細(xì)節(jié):
1:IE下面innerHTML會(huì)忽略沒(méi)作用域元素,no-scope element(script,link,style,meta,noscript)等,所以這類(lèi)通過(guò)innerHTML創(chuàng)建需要加前綴
2:innerHTML在IE下面會(huì)對(duì)字符串進(jìn)行trimLeft操作,去掉空白
3: innerHTML不會(huì)執(zhí)行腳本的代碼,如果支持defer除外
4:很多標(biāo)簽不能作為div的子元素、td、tr, tbody等等
5:jQuery是合集對(duì)象,文檔碎片的與事件的復(fù)制問(wèn)題
?
針對(duì)innerHTML不會(huì)執(zhí)行腳本的代碼,如果支持defer除外的解釋?zhuān)?/p>
div.innerHTML?=?"<script>alert(1)</srcript>"?這個(gè)代碼不會(huì)執(zhí)行
例外的情況:IE9之前滿(mǎn)足幾個(gè)條件
1:script設(shè)定defer屬性
2: script元素必須位于有作用域元素之后,因?yàn)閟cript被認(rèn)為是無(wú)作用域的(頁(yè)面中不可見(jiàn))
換句話(huà)說(shuō),這樣設(shè)置
div.innerHTML?=?"<div><script?defer>alert(1)</srcript></div>"??可以執(zhí)行
jQuery在內(nèi)部通過(guò)會(huì)有一個(gè)domManip方法,把這些問(wèn)題都方方面面處理掉了
?
綜合上面一系列的問(wèn)題,jQuery引入了domManip方法
原因清楚了,我們?cè)賮?lái)看jQuery是如何處理tbody問(wèn)題,jQuery是兼容IE 6瀏覽器的。append、prepend、before和after都是操作Dom元素的函數(shù),如果被插入的對(duì)象是table,那就要在table中加入tbody標(biāo)簽啊
所以domManip,主要是處理這個(gè)問(wèn)題的,他還處理插入元素的順序等等
在結(jié)構(gòu)上首先用extend在原型上拓展了一堆方法,其實(shí)每一個(gè)的實(shí)現(xiàn)都很簡(jiǎn)單,重點(diǎn)就是要看懂domManip的使用??梢灾攸c(diǎn)挑兩個(gè)方法的實(shí)現(xiàn)看一看,不用每個(gè)都看。
然后就是appendTo和append之類(lèi)的處理,大同小異,因?yàn)閷?shí)現(xiàn)差不多,所以就放在一起了
查看全部 -
HTML結(jié)構(gòu):
$('.inner').after('<p>Test</p>');
$對(duì)象:
$('.container').after($('h2'));
回調(diào)函數(shù)
一個(gè)返回HTML字符串、DOM 元素、 或者 jQuery 對(duì)象的函數(shù),插在每個(gè)匹配元素的后面。接收元素在集合中的索引位置作為參數(shù)。在函數(shù)中this指向元素集合中的當(dāng)前元素:
.domManip()是jQuery DOM操作的核心函數(shù)。dom即Dom元素,Manip是Manipulate的縮寫(xiě),連在一起就是Dom操作的意思。
對(duì)封裝的節(jié)點(diǎn)操作做了參數(shù)上的校正支持,與對(duì)應(yīng)處理的調(diào)用:append、prepend、before、after、replaceWith、appendTo、prependTo、insertBefore、insertAfter、replaceAll。
為什么需要用這個(gè)domManip函數(shù)呢?
我們知道節(jié)點(diǎn)操作瀏覽器提供的接口無(wú)非就是那么幾個(gè):
appendChild()
通過(guò)把一個(gè)節(jié)點(diǎn)增加到當(dāng)前節(jié)點(diǎn)的childNodes[]組,給文檔樹(shù)增加節(jié)點(diǎn):
cloneNode()
復(fù)制當(dāng)前節(jié)點(diǎn),或者復(fù)制當(dāng)前節(jié)點(diǎn)以及它的所有子孫節(jié)點(diǎn):
hasChildNodes()
如果當(dāng)前節(jié)點(diǎn)擁有子節(jié)點(diǎn),則將返回true:
insertBefore()
給文檔樹(shù)插入一個(gè)節(jié)點(diǎn),位置在當(dāng)前節(jié)點(diǎn)的指定子節(jié)點(diǎn)之前。如果該節(jié)點(diǎn)已經(jīng)存在,則刪除之再插入到它的位置:
removeChild()
從文檔樹(shù)中刪除并返回指定的子節(jié)點(diǎn):
replaceChild()
從文檔樹(shù)中刪除并返回指定的子節(jié)點(diǎn),用另一個(gè)節(jié)點(diǎn)替換它。
以上接口都有一個(gè)特性,傳入的是一個(gè)節(jié)點(diǎn)元素。如果我們傳遞不是一個(gè)dom節(jié)點(diǎn)元素,如果是一個(gè)字符串,一個(gè)函數(shù)或者其他呢?
所以針對(duì)所有接口的操作,jQuery會(huì)抽象出一種參數(shù)的處理方案,也就是domManip存在的意義了,針對(duì)很多類(lèi)似接口的參數(shù)抽象jQuery內(nèi)部有很多這樣的函數(shù)了,如之前屬性操作中的jQuery.access。
查看全部
舉報(bào)