两个要点,
1.$(xxx) 首先要判断xxx的类型,如果是节点类型,直接赋值就好了,如果是节点的集合就需要遍历来放入使用,
2.在将setText 和 getText 合并的时候,可以直接判断传入参数的类型为 undefined 那么就是获取text
大胆猜测一下,jQ的链式操作可能就是在方法的末尾返回了this。如下面的代码可以进行 $(xxx).addClass('xxx').addClass('xxxxx')
window.jQuery = function (nodeOrSelector) {
let node = {}
if (typeof nodeOrSelector === 'string') {
const list = document.querySelectorAll(nodeOrSelector)
list.forEach((item, index) => {
node[index] = item
})
node.length = list.length
} else {
node[0] = nodeOrSelector
node.length = 1
}
return {
node,
addClass (className) {
for (let i=0;i<node.length;i++) {
node[i].classList.add(className)
}
return this
},
text (text) {
if (text === undefined) {
let texts = []
for (let i=0;i<node.length;i++) {
texts.push(node[i].textContent)
}
return texts
} else {
for (let i=0;i<node.length;i++) {
node[i].textContent = text
}
}
}
}
}
window.$ = window.jQuery
console.log($('.div'))
$('.div').addClass('sss').addClass('ssss')
console.log($('.div').text())