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

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)
}
}
命名空間

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


獲取多個(gè)元素

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

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


注意函數(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