动手写一个jQuery
封装两个函数
<ul>
<li id='item1'>选项1</li>
<li id='item2'>选项2</li>
<li id='item3' class = 's'>选项3</li>
<li id='item4'>选项4</li>
<li id='item5'>选项5</li>
</ul>
//获取所有兄弟姐妹
function getSiblings(node){
var allChild = node.parentNode.children
var array = {
length:0
}
for (let i= 0;i<allChild.length;i++){
if(allChild[i]!== node){
array[array.length] =allChild[i]
array.length += 1
}
}
}
// 循环添加classList
function addclass (node,classes){
for(let key in classes){
var methodName = classes[key] ? 'add':'remove'
node.classList[methodName](key)
}
}
addclass(item2, {'a':true,'b':false,'c':true})
命名空间(yui)
window.madom = {}
//获取所有兄弟姐妹
madom.getSiblings = function getSiblings(node){
var allChild = node.parentNode.children
var array = {
length:0
}
for (let i= 0;i<allChild.length;i++){
if(allChild[i]!== node){
array[array.length] =allChild[i]
array.length += 1
}
}
}
// 循环添加classList
madom.addclass = function addclass (node,classes){
for(let key in classes){
var methodName = classes[key] ? 'add':'remove'
node.classList[methodName](key)
}
}
madom.addclass(item2, {'a':true,'b':false,'c':true})
madom.getSiblings(item3)
Node.prototype
添加到Node的共有属性
//获取所有兄弟姐妹
Node.prototype.getSiblings = function getSiblings(node){
var allChild = this.parentNode.children
var array = {
length:0
}
for (let i= 0;i<allChild.length;i++){
if(allChild[i]!== this){
array[array.length] =allChild[i]
array.length += 1
}
}
}
// 循环添加classList
Node.prototype.addClass = function addclass (,classes){
for(let key in classes){
var methodName = classes[key] ? 'add':'remove'
this.classList[methodName](key)
}
}
item3.getSiblings()
//此时item3就是this,会传参进去,等价于item3.getSiblings.call(item3)
item3.addclass(item2, {'a':true,'b':false,'c':true})
写一个Node2
node2是一个存储返回值地址的对象
jQuery
一个升级的Dom,接收一个node或者选择器,返回一个新的对象,新的对象有新的API
操作多个node的jQuery
创造的temp数组是一个有干净的Object原型链数组(非NodeList原型链),同理返回的node数组也是干净的原型链。既然是哈希,就可以往里边加函数,
1.0版本
3.0版本
给了参数就是修改,没给参数就是获取
小总结
node2就是一个hash。
题目
<div id=x></div>
var div = document.getElementById('x')
var $div = $('#x')
请说出 div 和 $div 的联系和区别。\
div 和 $div 的联系是:
$(div) 可以将 div 封装成一个 jQuery 对象,就跟 $div 一样
**$div[0] === div ,$div 的第一项就是 div**
div 和 $div 的区别是:
div 的属性和方法有 childNodes firstChid nodeType 等
$div 的 属性和方法有 addClass removeClass toggleClass 等