自制jquery-第一篇

1,

<!DOCTYPE html>
  <html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>JS Bin</title>
    <style>
    .xxx{
        border: 1px solid black;
        height: 50px;background: red
    }
    .active{
        background: yellow;
    }
    </style>
  </head>
  <body>

    <div class="xxx">div text1<span>this is span1</span></div>
    <div class="xxx">div text2<span>this is sapn2</span></div>

    <script src="./jquery.js"></script>
    <script>
     var $xxx=$(".xxx")

     var div1=$xxx[0],
         div2=$xxx[1]

     $xxx.addClass("active").html("<p>自制jquery添加的p標(biāo)簽段落</p>").on("click",function(){
        $xxx.removeClass("active")
     })
    </script>
  </body>
  </html> 

jquery.js腳本文件

window.jquery=function(element){
    var array=[]

    var element=document.querySelectorAll(element)

    for(var i=0;i<element.length;i++){
       array.push(element[i])
    }


    array.on=function(eventType,fn){
          for(var i=0;i<array.length;i++){
            array[i].addEventListener("click",fn)
          }
          return array
        }
    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)
          }
          return array
    }
    array.toggleClass=function(classname){
        for(var i=0;i<array.length;i++){
          array[i].classList.toggle(classname)
          }
          return array
    }
    array.text=function(value){
    if (value==undefined) {
        for(var i=0;i<array.length;i++){
          var textarray=[] 
          textarray.push(array[i].textContent)
        }
        return textarray
    }else{
        for(var i=0;i<array.length;i++){
          array[i].textContent=value
        }
          return array
    }
    }
    array.html=function(htmlstring){
        if (htmlstring==undefined) {
        for(var i=0;i<array.length;i++){
          var textarray=[] 
          textarray.push(array[i].innerHTML)
        }
        return textarray
    }else{
        for(var i=0;i<array.length;i++){
          array[i].innerHTML=htmlstring
        }
          return array
    }
    }

    return array
  }
  window.$=window.jquery

2寨昙,實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用的原理

非鏈?zhǔn)秸{(diào)用:
$xxx.addClass("active")
$xxx.html("")
$xxx.on("click",fn)

鏈?zhǔn)秸{(diào)用:
$xxx.addClass("active").html("").on("click",fn)

把非鏈?zhǔn)秸{(diào)用轉(zhuǎn)換成鏈?zhǔn)秸{(diào)用
例子:
把$xxx.addClass("active") 轉(zhuǎn)換成 $xxx
在上面的自制jquery腳本文件里面 獲取的$xxx是一個(gè)數(shù)組 那么只需要在每個(gè)方法里面返回?cái)?shù)組

圖片.png

3巡验,實(shí)現(xiàn) jquery里面的find API

  array.find=function(selector){
      var array1=[]
      for(var i=0;i<array.length;i++){  //循環(huán)每個(gè)父元素
         var elements=[]
         elements=array[i].querySelectorAll(selector)  //得到每個(gè)父元素下的所有選擇器為selector的元素?cái)?shù)組
         for(var j=0;j<elements.length;j++){  //遍歷得到的元素?cái)?shù)組
            array1.push(elements[j])   //把元素放到array1里面
         }
      }
      
      /*返回的是一個(gè)數(shù)組*/
      return array1
  }

注:實(shí)現(xiàn)了jquery的find方法 但是得到的元素標(biāo)簽沒(méi)有 我們自己制作的其他API方法 怎么辦旨椒?

修改上面制作的jquery API方法

兩個(gè)現(xiàn)象:
1,選擇器來(lái)的是一個(gè)字符串
2跨嘉,find得到的元素是一個(gè) 數(shù)組

所以:

圖片.png

4跳夭,find后完整的代碼

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
  .xxx{
    border: 1px solid black;
    height: 200px;background: red
  }
  .active{
    background: yellow;
  }
  </style>
</head>
<body>

  <div class="xxx">
    div text1
    <span>this is span1</span>
    <p>xxx1</p>
    <p>xxx1</p>
    <p>xxx1</p>
  </div>
  <div class="xxx">
    div text2
    <span>this is sapn2</span>
    <p>xxx1</p>
    <p>xxx1</p>
  </div>

  <script src="./jquery.js"></script>
  <script>
   var $xxx=$(".xxx")

   var div1=$xxx[0],
       div2=$xxx[1]


   $xxx.find("p").on("click",function(){
    console.log("click")
   })
  </script>
</body>
</html>

js文件

window.jquery=function(elementorarray){
  var array=[]


  if(typeof(elementorarray)=="string"){
    /*接收的選擇器是一個(gè)字符串*/
    var element=document.querySelectorAll(elementorarray)
    for(var i=0;i<element.length;i++){
        array.push(element[i])
    }
  }else if (elementorarray instanceof Array) {
     for(var i=0;i<elementorarray.length;i++){
        array.push(elementorarray[i])
     }
  }

  array.on=function(eventType,fn){
    for(var i=0;i<array.length;i++){
          array[i].addEventListener("click",fn)
    }
    return array
  }

  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)
    }
    return array
  }

  array.toggleClass=function(classname){
    for(var i=0;i<array.length;i++){
          array[i].classList.toggle(classname)
    }
    return array
  }

  array.text=function(value){
    if (value==undefined) {
        for(var i=0;i<array.length;i++){
          var textarray=[] 
          textarray.push(array[i].textContent)
      }
      return textarray
    }else{
        for(var i=0;i<array.length;i++){
          array[i].textContent=value
      }
      return array
    }
  }

  array.html=function(htmlstring){
    if (htmlstring==undefined) {
        for(var i=0;i<array.length;i++){
          var textarray=[] 
          textarray.push(array[i].innerHTML)
        }
        return textarray
      }else{
         for(var i=0;i<array.length;i++){
            array[i].innerHTML=htmlstring
       }
         return array
     }
  }

  array.find=function(selector){
      var array1=[]
      for(var i=0;i<array.length;i++){
         var elements=[]
         elements=array[i].querySelectorAll(selector)
         for(var j=0;j<elements.length;j++){
            array1.push(elements[j])
         }
      }

      /*返回的是一個(gè)數(shù)組*/
      return  jquery(array1)
  }

  return array
}
window.$=window.jquery

5,在find()方法上面獲取 到子元素后 通過(guò)end()獲取子元素的父元素

圖片.png
圖片.png
圖片.png
圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岸浑,一起剝皮案震驚了整個(gè)濱河市陷猫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌的妖,老刑警劉巖绣檬,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嫂粟,居然都是意外死亡娇未,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門星虹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)零抬,“玉大人,你說(shuō)我怎么就攤上這事宽涌∑揭梗” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵卸亮,是天一觀的道長(zhǎng)忽妒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)兼贸,這世上最難降的妖魔是什么段直? 我笑而不...
    開(kāi)封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮溶诞,結(jié)果婚禮上鸯檬,老公的妹妹穿的比我還像新娘。我一直安慰自己螺垢,他們只是感情好喧务,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布赖歌。 她就那樣靜靜地躺著,像睡著了一般蹂楣。 火紅的嫁衣襯著肌膚如雪俏站。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天痊土,我揣著相機(jī)與錄音肄扎,去河邊找鬼。 笑死赁酝,一個(gè)胖子當(dāng)著我的面吹牛犯祠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酌呆,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衡载,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了隙袁?” 一聲冷哼從身側(cè)響起痰娱,我...
    開(kāi)封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菩收,沒(méi)想到半個(gè)月后梨睁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娜饵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年坡贺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箱舞。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遍坟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晴股,到底是詐尸還是另有隱情愿伴,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布队魏,位于F島的核電站公般,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胡桨。R本人自食惡果不足惜官帘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昧谊。 院中可真熱鬧刽虹,春花似錦、人聲如沸呢诬。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至阀圾,卻和暖如春哪廓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背初烘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工涡真, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肾筐。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓哆料,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吗铐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子东亦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 1.JQuery 基礎(chǔ) 改變web開(kāi)發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性唬渗。 1....
    LaBaby_閱讀 1,335評(píng)論 0 2
  • 1.JQuery 基礎(chǔ) 改變web開(kāi)發(fā)人員創(chuàng)造搞交互性界面的方式典阵。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,174評(píng)論 0 1
  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    程序員poetry閱讀 16,645評(píng)論 18 503
  • jQuery基礎(chǔ) 什么是JQ镊逝?一個(gè)優(yōu)秀的JS庫(kù)萄喳,大型開(kāi)發(fā)必備JQ的好處?一簡(jiǎn)化JS的復(fù)雜操作二不再需要關(guān)心兼容性三...
    幺七閱讀 947評(píng)論 0 2
  • 最近腦中總是閃現(xiàn)一絲瀕死的念頭蹋半,覺(jué)得害怕死亡這件事情開(kāi)始變得莫名其妙起來(lái)。 近來(lái)工作狀態(tài)說(shuō)不出來(lái)的比以往好充坑,想要更...
    卓北北閱讀 435評(píng)論 0 0