自己做一个jQuery
2018-04-25 本文已影响0人
zzzZink
什么是jQuery?
jQuery本质只是一个中间层,提供一套统一易用的DOM操作接口。
那么,今天我们就来自己实现一个简易版的jQuery
首先我们来实现选择器
window.jQuery = function(nodeOrSelector){
let nodes = {} //统一使用对象
//首先我们需要判断用户是想获取多个元素节点还是一个
if(typeof nodeOrSelector === 'string'){
let temp = document.querySelectorAll(nodeOrSelector)
//遍历临时对象temp,将他的值放入nodes内,这样我们就能得到一个纯净的对象,而不是querySelectorAll返回的NodeList
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
}
}
return nodes //返回nodes
}
接下来我们为nodes添加addClass方法:
//classes是用户想要添加的class名
nodes.addClass = function(classes){
//遍历nodes,为nodes内每一个元素节点添加class
for(let i=0;i<nodes.length;i++){
nodes[i].classList.add(classes)
}
}
最后我们为nodes添加setText方法:
//text是用户想要添加的文本
nodes.setText = function(text){
//遍历nodes,为nodes内每一个元素节点的textContent添加text
for(let i=0;i<nodes.length;i++){
nodes[i].textContent = text
}
}
最后我们再创建一个window对象
window.$ = window.jQuery
下面是完整代码
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){
for(let i=0;i<nodes.length;i++){
nodes[i].classList.add(classes)
}
}
nodes.setText = function(text){
for(let i=0;i<nodes.length;i++){
nodes[i].textContent = text
}
}
return nodes
}
window.$ = window.jQuery
var $div = $('div') //获取所有div元素
$div.addClass('red')
$div.setText('hi')
ok,这样我们就初步实现了自己的简易版jQuery(以上使用到了闭包)。