DOM 庫

<a >jQuery中文文檔</a>

jQuery版本

  • 1.x (兼容到IE6)
  • 2.x (不兼容IE8以上,包括IE8)
  • 3.x (兼容IE10)

IE寫法

button.attachEvent('click',fn)

API 設(shè)計(jì)

let items = $('li')

items.on('click', function(){
  console.log('click')
})

items.addClass('hi').removeClass('error')

items.text('你好')

items.get(0)

1. item 沒有 siblings 方法
2. 需求要有 xxx.siblings 方法
3. $item = $(item)   $item.siblings() 返回 item 的兄弟

1. $item.siblings() 沒有 addClass 方法
2. 需求要有  $item.siblings().addClass
3. $item.siblings() 的結(jié)果是 $('li') 類似的東西

$item.siblings().removeClass('active').end()
  .addClass('active')

1.let items = $('li')

window.$ = function(selector){
   return document.querySelectorAll(selector)
}

參數(shù)是CSS選擇器 , 得到參數(shù)返回CSS選擇器的全部

items.on('click', function(){})

window.$ = function (selector) {
    let array = []
    let items = document.querySelectorAll(selector)
    for (var i = 0; i < items.length; i++) {
        array.push(items[i])
    }
    array.on = function (eventType, fn) {
        for (var i = 0; i < array.length; i++) {
            array[i].addEventListener(eventType, fn)
        }
    }
    return array
} 

TIM截圖20170417145349.png

上圖獲取了所有的li像是一個(gè)數(shù)組 , 但實(shí)際上并不是 , 這不是一個(gè)數(shù)組

items.addClass('hi').removeClass('error')

實(shí)現(xiàn)items.addClass('hi').removeClass('error') , 把a(bǔ)ddClass換成items

window.$ = function (selector) {
    let array = []
    let items = document.querySelectorAll(selector)
    for (var i = 0; i < items.length; i++) {
        array.push(items[i])
    }
    array.on = function (eventType, fn) {
        for (var i = 0; i < array.length; i++) {
            array[i].addEventListener(eventType, fn)
        }
    }
    array.addClass = function(className) {   //設(shè)置賦值函數(shù) , 參數(shù)是className
      for(var i = 0;i<array.length;i++){              //遍歷
         array[i].classList.add(className)       //把每個(gè)都添加
        }
          return array  返回 , 讓items.addClass === items , 方可做到items.addClass('hi').removeClass('error')
    }
    return array
} 

items.text('你好')

window.$ = function (selector) {
    let array = []
    let items = document.querySelectorAll(selector)
    for (var i = 0; i < items.length; i++) {
        array.push(items[i])
    }
    array.on = function (eventType, fn) {
        for (var i = 0; i < array.length; i++) {
            array[i].addEventListener(eventType, fn)
        }
    }
    array.addClass = function (className) {
        for (var i = 0; i < array.length; i++) {
            array[i].classList.add(className)
        }
        return array
    }
    array.removeClass = function (className) {
        for (var i = 0; i < array.length; i++) {
            array[i].classList.remove(className)
        }
    }
    array.text = function (value) {    //傳參數(shù) , 類型value
        if (value !== undefined) {      //如果你的值不是undefined
            for (var i = 0; i < array.length; i++) {    //遍歷 
                array[i].textContent = value            //每一個(gè) , textContent = value
            }
            return array             //返回 array
        } else {                         //否則
            let result = []             //聲明 result = [] 
            for (var i = 0; i < array.length; i++) {                 //遍歷
                result.push(array[i].textContent)                  //push到result
            }
            return result  //返回return
        }
    }
    return array
} 

這時(shí)候 , 如果是jQuery 它只取第一個(gè)值 , 比如多個(gè) 你好 的話 , 只取第一個(gè)你好

items.get(0)

window.$ = function (selector) {
    let array = []
    let items = document.querySelectorAll(selector)
    for (var i = 0; i < items.length; i++) {
        array.push(items[i])
    }

    array.get = function(index){   //設(shè)置get方法 , 傳入?yún)?shù)索引
        return array[index]            //返回array索引
    }
    return array
} 

$item.siblings().removeClass('active')

// $ 接受一個(gè)字符串||元素||元素列表
// 返回一個(gè)新的數(shù)組
// 這個(gè)數(shù)組有 on  addClass 等等的API
window.$ = function (selectorOrNode) {
    let array = []
    if (typeof selectorOrNode === 'string') {                    //如果selectorOrNode === 'string'
        let items = document.querySelectorAll(selectorOrNode) //獲取全部selectorOrNode
        for (var i = 0; i < items.length; i++) {   //遍歷
            array.push(items[i])    push 到 數(shù)組中
        }
    } else if (selectorOrNode instanceof Element) {      //如果 selectorOrNode的類型是 Element
        array.push(selectorOrNode)           //就selectorOrNode push 到 數(shù)組中
    } else if(selectorOrNode instanceof Array){   //如果selectorOrNode類型Array 
        for(var i = 0;i<selectorOrNode.length;i++) {     //遍歷
            array.push(selectorOrNode[i])   //就把每一個(gè)push到array
             }      
    }
    array.on = function (eventType, fn) {
        for (var i = 0; i < array.length; i++) {
            array[i].addEventListener(eventType, fn)
        }
    }
    array.addClass = function (className) {
        for (var i = 0; i < array.length; i++) {
            array[i].classList.add(className)
        }
        return array
    }
    array.removeClass = function (className) {
        for (var i = 0; i < array.length; i++) {
            array[i].classList.remove(className)
        }
    }
    array.text = function (value) {
        if (value !== undefined) {
            for (var i = 0; i < array.length; i++) {
                array[i].textContent = value
            }
            return array
        } else {
            let result = []
            for (var i = 0; i < array.length; i++) {
                result.push(array[i].textContent)
            }
            return result
        }
    }
    array.get = function (index) {
        return array[index]
    }
    array.siblings = function () {                          
        let children = array[0].parentNode.children  //聲明孩子們 獲取第1個(gè)的父節(jié)點(diǎn)的孩子們
        let result = []      //聲明一個(gè)數(shù)組空數(shù)組result
        for(var i=0;i<children.length;i++){   //遍歷孩子們
            if(children[i] !== array[0]){           // 如果這個(gè)children的孩子們和這個(gè)數(shù)組的第一個(gè)不一樣
                result.push(children[i])    //就把他push到數(shù)組
            }
        }
        return $(reusltArray)        //返回?cái)?shù)組包裝$ , 這樣就能返還的內(nèi)容帶有API ,實(shí)現(xiàn)后續(xù)方法
    }
    return array
} 

$item.siblings().removeClass('active').end()

window.$ = function (selectorOrNode) {
    let array = []
    if (typeof selectorOrNode === 'string') {
        let items = document.querySelectorAll(selectorOrNode)
        for (var i = 0; i < items.length; i++) {
            array.push(items[i])
        }
    } else if (selectorOrNode instanceof Element) {
        array.push(selectorOrNode)
    } else if (selectorOrNode instanceof Array) {
        for(var i=0;i<selectorOrNode.length;i++){
            if(!(selectorOrNode[i] instanceof Element)){       //如果不是Element
                  continue                  //就continue
              }
            array.push(selectorOrNode[i])
        }
    }


    array.on = function (eventType, fn) {
        for (var i = 0; i < array.length; i++) {
            array[i].addEventListener(eventType, fn)
        }
    }
    array.addClass = function (className) {
        for (var i = 0; i < array.length; i++) {
            array[i].classList.add(className)
        }
        return array
    }
    array.removeClass = function (className) {
        for (var i = 0; i < array.length; i++) {
            array[i].classList.remove(className)
        }
    }
    array.text = function (value) {
        if (value !== undefined) {
            for (var i = 0; i < array.length; i++) {
                array[i].textContent = value
            }
            return array
        } else {
            let result = []
            for (var i = 0; i < array.length; i++) {
                result.push(array[i].textContent)
            }
            return result
        }
    }
    array.get = function (index) {
        return array[index]
    }
    array.end = function(){          //end屬性
        return array.beforeSelection   //返回之前的
    }
    array.siblings = function () {
        let children = array[0].parentNode.children
        let resultArray = []
        for (var i = 0; i < children.length; i++) {
            if (children[i] !== array[0]) {
                resultArray.push(children[i])
            }
        }
        let items = $(resultArray)        //這里需要又返回它的兄弟又返回它 
        items.beforeSelection = array  // 所以 把a(bǔ)rray存到一個(gè)之前屬性
        return items    //并返回
    }
    return array
} 

jQuery 錯(cuò)誤寫法

$('div').id = 1   //jQuery沒有封裝id這個(gè)東西
$('div').innerHTML = ''   // 這也是錯(cuò)誤的

全局變量&關(guān)鍵字

window.undefined  //這個(gè)undefined可以被覆蓋
var undefined = 1  //比如這樣 

//如果是關(guān)鍵字 就不行了 
var this = 1  <---這是錯(cuò)誤的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掺涛,一起剝皮案震驚了整個(gè)濱河市耸黑,隨后出現(xiàn)的幾起案子苦掘,更是在濱河造成了極大的恐慌戈锻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派任,死亡現(xiàn)場(chǎng)離奇詭異魄宏,居然都是意外死亡潮模,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門碍岔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浴讯,“玉大人,你說我怎么就攤上這事蔼啦∮芘Γ” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵捏肢,是天一觀的道長奈籽。 經(jīng)常有香客問我,道長鸵赫,這世上最難降的妖魔是什么衣屏? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮辩棒,結(jié)果婚禮上狼忱,老公的妹妹穿的比我還像新娘膨疏。我一直安慰自己,他們只是感情好钻弄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布佃却。 她就那樣靜靜地躺著,像睡著了一般斧蜕。 火紅的嫁衣襯著肌膚如雪双霍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天批销,我揣著相機(jī)與錄音洒闸,去河邊找鬼。 笑死均芽,一個(gè)胖子當(dāng)著我的面吹牛丘逸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掀宋,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼深纲,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了劲妙?” 一聲冷哼從身側(cè)響起湃鹊,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镣奋,沒想到半個(gè)月后币呵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侨颈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年余赢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哈垢。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妻柒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耘分,到底是詐尸還是另有隱情举塔,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布陶贼,位于F島的核電站啤贩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拜秧。R本人自食惡果不足惜痹屹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枉氮。 院中可真熱鬧志衍,春花似錦暖庄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至春叫,卻和暖如春肩钠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暂殖。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工价匠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呛每。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓踩窖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晨横。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洋腮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 成品:點(diǎn)我源碼:點(diǎn)這個(gè)我需求如下: 第一個(gè)需求,需要我們通過$方法傳入一個(gè)需要查詢的選擇器手形,并使它返回一個(gè)包含查詢...
    這名字真不對(duì)閱讀 189評(píng)論 0 0
  • //------------------------- 第一章 認(rèn)識(shí)JQuery ----------------...
    米塔塔閱讀 707評(píng)論 0 9
  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    程序員poetry閱讀 16,639評(píng)論 18 503
  • 她說天陰了啥供,她要睡覺; 我說睡吧库糠,醒來就會(huì)晴天滤灯。 她說下雨了,她在窗前賞花曼玩; 我說看吧,美麗并不常在窒百。 她說她跳進(jìn)...
    阿土127閱讀 275評(píng)論 1 2
  • 向先生現(xiàn)在只想發(fā)財(cái)了黍判! 向先生小學(xué)時(shí)候最是歡樂,上課不認(rèn)真篙梢,下課玩得認(rèn)真——一心就想著玩顷帖,啥也不管,啥也不顧——上...
    老哈哈閱讀 363評(píng)論 0 1