1. jQuery接受一个字符串
2.拿到这个字符串nodeOrSelector
3.分析这个字符串,是字符串还是个节点
如果是字符串,就去找到对应的所有元素,遍历之后放到伪数组里
![dcf8b4d3c00001ba3b9c26471d26a77c.png](https://i-blog.csdnimg.cn/blog_migrate/ebda30a1af4b75753f09968765fea70a.jpeg)
如果是节点,就把节点放到伪数组里面
![809e9dac48ec618cd2ccf33bed5909a9.png](https://i-blog.csdnimg.cn/blog_migrate/c3f0af166a00f3fbad94b7266fe67359.jpeg)
4.这时候外面调用 addClass ,就会去遍历这个classes,逐个放到伪数组的每一项元素里面
![2ac3564bc00ed43dad08d4969957da75.png](https://i-blog.csdnimg.cn/blog_migrate/29b27ef8393975391d6caad49d729dff.jpeg)
5. text这个函数,如果你传参数就是设置,不传参数就是获取。
![2fb2a4fbb841fd88ab45d5ce49d6c214.png](https://i-blog.csdnimg.cn/blog_migrate/bfa92199930ba3730f2e459091232a71.jpeg)
总体是这样的一个逻辑:
你可以给我一个选择器,也可以给我一个节点,把找到的结果放到nodes里面,
你要用nodes时,在addClass api里用,这样你就可以调用addClass了,不是操作node2,而是操作nodes
node2就是函数的返回值nodes,其实就是
![208097fe3ef02f493e79f3639b82d5b3.png](https://i-blog.csdnimg.cn/blog_migrate/eddeee10238850ba6811522be7a0640d.jpeg)
贴代码:
window.jQuery = function(nodeOrSelector){
let node = {}
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.setText = function(text){
if(text === undefined){
var texts = []
for (let i = 0; i < nodes.length; i++) {
texts.push(nodes[i].textContent)
}
return texts
}else{
for (let i = 0; i < nodes.length; i++) {
nodes[i].textContent = text
}
}
},
nodes.addClass = function(classes){
classes.forEach(value => {
for(let i = 0; i < nodes.length; i++){
nodes[i].classList.add(value)
}
})
}
return nodes
}
window.$ = jQuery
var $div = $('div')
$div.addClass('red') // 可将所有 div 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi