亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
  • Math.max(0, startTime + options.duration - createTime()) 過濾出數組最大值

    +new Date 時間戳

    查看全部
    0 采集 收起 來源:動畫算法

    2020-05-13

  • onceRun =?

    function(func) {

    ? ? ? ? ? ? ? ? ? ??

    ? ? ? ? ? ? ? ? ? ? makeAnim(element, options, func);

    ? ? ? ? ? ? ? ? }


    func =?

    function() {

    ? ? ? ? ? ? ? ? ? ? ? ? fireing = false;

    ? ? ? ? ? ? ? ? ? ? ? ? _fire();

    ? ? ? ? ? ? ? ? ? ? }


    查看全部
    0 采集 收起 來源:動畫思路

    2020-05-12

    1. 在 ajax 請求中類型如果是 type 是 post,其實內部都只會用 get,因為其跨域的原理就是用的動態加載 script 的 src,所以我們只能把參數通過 url 的方式傳遞

    2. 我們使用了 dataType 是 'jsonp' 但是 jquery 內部有進一步的優化,如果探測到還是同域下的請求,依然還是用 XmlHttpRequest 處理,所以我們在同域下測試的話,可以把 crossDomain 選項置為 true,這樣強制為跨域處理,這樣就會通過 script 處理了


    查看全部
    0 采集 收起 來源:jsonp的實現

    2020-05-11

  • jsonp: "callback", //傳遞給請求處理程序或頁面的,用以獲得jsonp回調函數名的 參數名(一般默認為:callback)

    ? ? jsonpCallback: "Handler", //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名,也可以寫"?",jQuery會自動為你處理數據


    查看全部
    0 采集 收起 來源:json與jsonp

    2020-05-11

  • 如果 on 中傳入參數 selector ,意味著就是有委托的處理,那么我們就需要用一個標記來記錄下這個元素到底委托了多少次。

    查看全部
    0 采集 收起 來源:委托設計

    2020-05-08

  • event 對象的屬性和方法包含了當前事件的狀態。

    當前事件,是指正在發生的事件;狀態,是與事件有關的性質,如引發事件的?DOM?元素、鼠標的狀態、按下的鍵等等。

    ?

    如上結構,currentTarget 是 aaron 的 div 元素 , target 是 p 元素,事件對象是有作用域的 currentTarget 是等于 this 的。


    e.stopImmediatePropagation 方法不僅阻止了一個事件的冒泡,也把這個元素上的其他綁定事件也阻止了。


    事件對象提供了 preventDefault,stopPropagation2 個方法一個停止事件傳播,一個傳遞默認的行為(暫且無視IE),

    查看全部
    0 采集 收起 來源:事件對象

    2020-05-08

  • 在下列情況下,應該使用 .live()或 .delegate(),而不能使用 .bind():

    1.?為DOM中的很多元素綁定相同事件;
    2.?為DOM中尚不存在的元素綁定事件;
    3.?用.bind()的代價是非常大的,它會把相同的一個事件處理程序hook到所有匹配的DOM元素上
    4.?不要再用.live()了,它已經不再被推薦了,而且還有許多問題
    5.?.delegate()會提供很好的方法來提高效率,同時我們可以添加一事件處理方法到動態添加的元素上

    我們可以用 .on() 來代替上述的 3 種方法。

    不足點也是有的:

    1.?并非所有的事件都能冒泡,如load,?change,?submit,?focus,?blur
    2.?加大管理復雜
    3.?不好模擬用戶觸發事件
    4.?如何取舍就看項目實際中運用了



    ?.bind() 綁定事件的時候這些元素必須已經存在,很明顯就是直接調用沒利用委托機制,如下:

    問:單擊ddddd,會在最上面顯示sdfsdf,但我單擊sdfsdf后,并沒有顯示“on觸發”,是因為on不能綁定動態添加的元素嗎?

    <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觸發! ");

    });


    答:on支持動態綁定,只不過需要綁定到父級元素上。(使用委托機制)

    <script>

    $("h2").on("click",function(){

    $("p:first").before(" <h3>sdfsdf</h3>");

    })

    $("body").on("click","h3", function(){

    ??? $("span").append("on觸發! ");

    });

    ?</script>


    查看全部
    0 采集 收起 來源:幾種綁定

    2020-05-08

  • jQuery不支持獲取隱藏元素的偏移坐標。同樣的,也無法取得隱藏元素的 border, margin, 或 padding 信息

    查看全部
    0 采集 收起 來源:坐標算法

    2020-05-07

  • cloneNode不會復制javascript屬性,比如事件,這個方法只會復制特性。當然IE有這個BUG它會復制事件處理程序。cloneNode(a)方法接受一個布爾值參數,表示是否深拷貝。

    true:表示執行深拷貝,復制本節點以及整個子節點樹。

    false:淺拷貝,只復制節點本身。

    復制后返回的節點副本屬于文檔所有,但是并沒有父節點。除非使用 appendChild,insertChild(),replaceChild()將它添加到文檔。



    cloneNode(true)的時候是遍歷的節點,但是不會把對應的事件與數據給復制,但是jQuery.clone方法克隆的時候,是會把該節點上的事件與數據給一并復制過去的,這樣的機制是建立在數據分離的基礎上。


    查看全部
    0 采集 收起 來源:克隆

    2020-05-06

  • 移除 涉及節點刪除的接口jQuery劃分了四個分別是detach,empty,remove,unwrap,因為使用的范圍不同,所以功能有所差異,但是總的來說都是用來清理節點的。?

    .empty() 從DOM中移除集合中匹配元素的所有子節點,為了避免內存泄漏,jQuery先移除子元素的數據和事件處理函數,然后移除子元素。?

    .remove() 將元素移出DOM,當我們想將元素自身移除時我們用 .remove(),同時也會移除元素內部的一切,包括綁定的事件及與該元素相關的jQuery數據。remove是empty的加強版,把本身的父節點也清除掉了。因為remove支持過濾器所以支持傳遞selecor。remove需要刪除自身及其所有的子元素包括事件與數據,所以要通過找到父節點parnetNode移除。?

    .detach() 如果你想刪除元素,不破壞他們的數據或事件處理程序(這些綁定的信息還可以在之后被重新添加回來)。.detach() 方法和.remove()一樣, 除了 .detach()保存所有jQuery數據和被移走的元素相關聯。當需要移走一個元素,不久又將該元素插入DOM時,這種方法很有用。

    innerText是我們常用的文本清理方法,但是火狐下不兼容,不過會提供一個類似的方法叫textContent。

    查看全部
    0 采集 收起 來源:移除

    2020-05-06

  • 在所有節點類型中,只有DocumentFragment在文檔中沒有對應的標記。DOM規定文檔片段(documentfragment)是一種“輕量級”的文檔,可以包含和控制節點,但不會像完整的文檔那樣占用額外資源。


    即當請求把一個 DocumentFragment 節點插入文檔樹時,插入的不是 DocumentFragment 自身,而是它的所有子孫節點。

    查看全部
  • jQuery在節點操作上使用了innerHTML,創建效率上來說至少比createElement快了2-10倍不等,而且還能一次性生成一堆的節點,但是隨之而來就有一些兼容性問題,

    我總結了有以下幾點,當然兼容上也結合了jQuery的解決方案。

    1. ? IE會對用戶字符串進行trimLeft操作,用戶可能的本意就是需要空白

    2. ? IE8有些元素innerHTML是只讀

    3. ? IE會忽略開頭的無作用域元素

    4. ? 大多情況下不執行script腳本,當然如果支持defer的IE9之前的瀏覽器除外

    5. ? 一些標簽不能作為div的子元素,如tr,tb, col等

    jQuery的節點操作最終是需要轉化成文檔碎片也就是要通過buildFragment()方法處理的,所以innerHTML兼容的修復也自然在buildFragment方法中。


    查看全部
    0 采集 收起 來源:innerHTML的缺陷

    2020-05-06

  • dffkklglg

    查看全部
    0 采集 收起 來源:遍歷同胞(下)

    2019-09-29

  • jjdkdkkdkd

    查看全部
    0 采集 收起 來源:遍歷同胞(下)

    2019-09-29

  • 來來來擴擴擴擴

    查看全部
  • jquery 源碼
    查看全部
    0 采集 收起 來源:遍歷祖先

    2019-09-07

  • ?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);

    ? ? };

    ? });


    查看全部
  • 接口抽象合并
    查看全部
  • 針對節點的操作有幾個重點的細節:

    1. 保證最終操作的永遠是dom元素,瀏覽器的最終API只認識那么幾個接口,所以如果傳遞是字符串或者其他的,當然需要轉換

    2. 針對節點的大量操作,我們肯定是需要引入文檔碎片做優化的,這個必不可少

    我們知道jQuery的的接口是支持多種參數傳遞的,那么就需要有一個過濾器的中介來處理各種參數類型。

    細節:

    1:IE下面innerHTML會忽略沒作用域元素,no-scope element(script,link,style,meta,noscript)等,所以這類通過innerHTML創建需要加前綴

    2:innerHTML在IE下面會對字符串進行trimLeft操作,去掉空白

    3: innerHTML不會執行腳本的代碼,如果支持defer除外

    4:很多標簽不能作為div的子元素、td、tr, tbody等等

    5:jQuery是合集對象,文檔碎片的與事件的復制問題

    ?

    針對innerHTML不會執行腳本的代碼,如果支持defer除外的解釋:

    div.innerHTML?=?"<script>alert(1)</srcript>"?這個代碼不會執行

    例外的情況:IE9之前滿足幾個條件

    1:script設定defer屬性

    2: script元素必須位于有作用域元素之后,因為script被認為是無作用域的(頁面中不可見)

    換句話說,這樣設置

    div.innerHTML?=?"<div><script?defer>alert(1)</srcript></div>"??可以執行

    jQuery在內部通過會有一個domManip方法,把這些問題都方方面面處理掉了

    ?

    綜合上面一系列的問題,jQuery引入了domManip方法

    原因清楚了,我們再來看jQuery是如何處理tbody問題,jQuery是兼容IE 6瀏覽器的。append、prepend、before和after都是操作Dom元素的函數,如果被插入的對象是table,那就要在table中加入tbody標簽啊

    所以domManip,主要是處理這個問題的,他還處理插入元素的順序等等

    在結構上首先用extend在原型上拓展了一堆方法,其實每一個的實現都很簡單,重點就是要看懂domManip的使用??梢灾攸c挑兩個方法的實現看一看,不用每個都看。

    然后就是appendTo和append之類的處理,大同小異,因為實現差不多,所以就放在一起了


    查看全部
    0 采集 收起 來源:深入domManip(上)

    2018-07-18

  • HTML結構:

    $('.inner').after('<p>Test</p>');

    $對象:

    $('.container').after($('h2'));

    回調函數

    一個返回HTML字符串、DOM 元素、 或者 jQuery 對象的函數,插在每個匹配元素的后面。接收元素在集合中的索引位置作為參數。在函數中this指向元素集合中的當前元素:

    .domManip()是jQuery DOM操作的核心函數。dom即Dom元素,Manip是Manipulate的縮寫,連在一起就是Dom操作的意思。

    對封裝的節點操作做了參數上的校正支持,與對應處理的調用:append、prepend、before、after、replaceWith、appendTo、prependTo、insertBefore、insertAfter、replaceAll。

    為什么需要用這個domManip函數呢?

    我們知道節點操作瀏覽器提供的接口無非就是那么幾個:

    appendChild()

    通過把一個節點增加到當前節點的childNodes[]組,給文檔樹增加節點:

    cloneNode()

    復制當前節點,或者復制當前節點以及它的所有子孫節點:

    hasChildNodes()

    如果當前節點擁有子節點,則將返回true:

    insertBefore()

    給文檔樹插入一個節點,位置在當前節點的指定子節點之前。如果該節點已經存在,則刪除之再插入到它的位置:

    removeChild()

    從文檔樹中刪除并返回指定的子節點:

    replaceChild()

    從文檔樹中刪除并返回指定的子節點,用另一個節點替換它。

    以上接口都有一個特性,傳入的是一個節點元素。如果我們傳遞不是一個dom節點元素,如果是一個字符串,一個函數或者其他呢?

    所以針對所有接口的操作,jQuery會抽象出一種參數的處理方案,也就是domManip存在的意義了,針對很多類似接口的參數抽象jQuery內部有很多這樣的函數了,如之前屬性操作中的jQuery.access。


    查看全部
    0 采集 收起 來源:節點操作

    2018-07-18

首頁上一頁1234567下一頁尾頁

舉報

0/150
提交
取消
課程須知
源碼的閱讀不是一蹴而就的,需要大家有一定的功底,比如jQuery的基礎運用以及API的熟悉度,除此之外要有牢固的javascript、DOM、CSS的基礎功底,甚至還需要理解常見的設計模式、數據結構等等。當然大家也不要被這些給嚇住了,理解,總是需要一種慢慢的學習過程。
老師告訴你能學到什么?
通過本課程的學習,您可以由淺入深地剖析jQuery庫的設計與實現。 其中我們圍繞的重心: 1、設計理念 2、結構組織 3、接口設計 4、模式運用 5、場景套用

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!