直接上代码
window.jQuery = function(nodeOrSelector){
let nodes = {}
if(typeof nodeOrSelector === 'string'){
let temp = document.querySelectorAll(nodeOrSelector)
for(let i = 0;i<temp.length;i++){
nodes[i]=temp[i]
}
nodes.length = temp.length
}else if (nodeOrSelector instanceof Node){
nodes={
0:nodeOrSelector,
length:1}
}
nodes.addClass = function(classes){
classes.forEach((value)=>{
for(let i = 0; i < nodes.length; i++){
nodes[i].classList.add(value)
}
})
}
nodes.text = function(text){
if(text === undefined){
var texts = []
for(let i = 0;i<nodes.length;i++){
texts.push(node[i].textContent)
}
return texts
}else{
for(let i = 0;i<nodes.length;i++){
nodes[i].textContent = text
}
}
}
return nodes
}
window.$ = jQuery
var $div = $('div')
$div.addClass(['red']) //将所有div的class添加一个red
$div.text('hi') //将所有div的textContent变为hi
上述代码的实现过程:
首先判断nodeOrSelector是不是字符串,
是: 在文档返回的nodeOrSelector元素列表赋值给变量temp,遍历temp,将temp传递给nodes;
否:nodeOrSelector拥有Node.prototype属性,将伪数组{0:nodeOrSelector;length:1}赋值给nodes
.addClass函数:传递一个classes参数,遍历它,将它的每个value通过nodes[i].classList.add(value)添加到标签上。
.text函数:传递一个text参数,判断是否为undefined,是(认定添加textContent):新定义一个空数组texts,遍历nodes,texts.push(node[i].textContent);否(认定获取textContent):遍历nodes,将其中的textContent赋值给text