實(shí)現(xiàn)一個(gè) jQuery 的 API

獲取目標(biāo)節(jié)點(diǎn)的兄弟節(jié)點(diǎn)

image.png
function getsiblings(node){
  var allchildren = node.parentNode.children
  var array ={length:0}
  for(let i=0;i<allchildren.length;i++){
    if(allchildren[i]!==node){
      arrary[array.length]=allchildren[i]
      arrary.length += 1
    }
  }
  return array
}

1.先獲取該節(jié)點(diǎn)父節(jié)點(diǎn)的所有子標(biāo)簽,裝入allchildren對(duì)象
2創(chuàng)建arrary對(duì)象
3.遍歷所有父節(jié)點(diǎn)的子標(biāo)簽,把不是目標(biāo)節(jié)點(diǎn)的標(biāo)簽放入arrary對(duì)象
4返回偽數(shù)組array
把執(zhí)行一個(gè)功能的代碼,裝在一個(gè)函數(shù)對(duì)象中
getSibling中arry[arry.length]=allchildren[i]
因?yàn)榉祷氐氖莂rray對(duì)象是偽數(shù)組,array中的key是array.length確定,一開始array.length=0,遍歷一次后偽數(shù)組的length應(yīng)該增加1,所以每一次遍歷結(jié)束前array.length +=1。

addclass,添加classname

一個(gè)節(jié)點(diǎn)添加一個(gè)class

node.classList.add('string')

一個(gè)節(jié)點(diǎn)添加多個(gè)class

var classes=['a','b','c']
classes.forEach((value)=>x.classList.add(value))

一個(gè)節(jié)點(diǎn)的多個(gè)class即能添加又能刪除

function addclass(classes){
  if(let key in classes){
    var value=classes[key]
    var methodName =value?add:remove
       node.classList[methodName](key)
      }
}

命名空間

image.png

addclass對(duì)一個(gè)元素添加或刪除多個(gè)classname,classes中的名為true時(shí)添加入node的classname中,value為flase時(shí)從node的classname中移除對(duì)應(yīng)的key。


image.png
image.png

獲取多個(gè)元素

image.png

返回值需要相同類型,當(dāng)傳入的參數(shù)(nodeOrSelector)是一個(gè)節(jié)點(diǎn),也要構(gòu)造一個(gè)偽數(shù)組


image.png

通過(guò)臨時(shí)偽數(shù)組temp存放querySelectorAll返回的Nodelist(原型指向Node),再遍歷temp把數(shù)據(jù)一個(gè)個(gè)放到nodes(對(duì)象,原型指向object.prototype)中


image.png
image.png

注意函數(shù)結(jié)尾不寫return nodes ,$div將為undefined

#window.$= jQuery
#var $div=$ ('div') 
#$div.addClass('red') 
#$div.setText('hi')

代碼思路jquery是一個(gè)函數(shù),函數(shù)返回一個(gè)對(duì)象,這個(gè)對(duì)象有addclass和setText兩種方法。

window.jQuery =function(nodeOrSelector){
var nodes={}
    if(typeof nodeOrSelector==='string'){
          let temp=document.querySelectorAll(nodeOrSelector)
          for(let i=0;i<temp.length;i++){
          nodes[i]=temp[i]
          }
          node[length]=temp[length]
    }else if(nodeOrSelector instanceof node){
        nodes={0:nodeOrSelector,length:1}
      }
}
nodes.addclass=function(classes){
    if(let key in classes){
    var value=classes[key]
    var methodName =value?'add':'remove'
    for(let i = 0;i<nodes.length;i++){
       node[i].classList[methodName](key)
      }
}

聲明變量key在classes對(duì)象中通過(guò)三元運(yùn)算符判斷key的boolean,當(dāng)布爾值是true時(shí),變量methodName的值為字符串a(chǎn)dd,遍歷
全部的節(jié)點(diǎn),添加或移除classes的key

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容