- 自己封装两个函数
function getSiblings(node){}
function getSiblings(node) {
var allChildren = node.parentNode.children
var array = {
length: 0
}
for (let i = 0; i < allChildren.length; i++) {
if (allChildren[i] !== node) {
array[array.length] = allChildren[i]
array.length += 1
}
}
return array
}
console.log(getSiblings(item3))
再封装一个
function addClass(node, classes){}
function addClass(node,classes){
for(let key in classes){
var value = classes[key]
if(value){
node.classList.add(key)
}else{
node.classList.remove(key)
}
}
}
addClass(item3,{a:true,b:false,c:true})
- 命名空间
window.ffdom={}
ffdom.getSiblings = getSiblings
ffdon.addClass = addClass
ffdom.getSiblings(item3)
ffdom.addClass(item3,['a','b','c'])
- Node.prototype
Node.prototype.getSiblings = function(){
var allChildren = this.parentNode.children
var array = {
length: 0
}
for (let i = 0; i < allChildren.length; i++) {
if (allChildren[i] !== this) {
array[array.length] = allChildren[i]
array.length += 1
}
}
return array
}
Node.prototype.addClass = function (classes) {
classes.forEach( (value) => this.classList.add(value) )
}
item3.getSiblings()
// item3.getSiblings.call(item3)
item3.addClass(['a','b','c'])
// item3.addClass.call(item3, [abc])
- Node2无侵入
window.jQuery = ???
window.$ = jQuery
var $div = $('div')
$div.addClass('red') // 可将所有 div 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi
实现代码如下
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.getText = function(){
var texts = []
for(let i = 0;i< nodes.length;i++){
texts.push(node[i].textContent)
}
return texts
}
nodes.setText = function(text){
for(let i = 0; i<nodes.length;i++){
nodes[i].textContent = text
}
}
return nodes
}
window.$ = jQuery
var $div = jQuery('div')
$div.addClass(['red'])
$div.setText('hi')
首先接受一个node或者选择器
把它封装成伪数组
为数组加上几个API然后返回nodes
声明一个node2=jQuery(‘选择器’),本质上是哈希
声明一个 $div=jQuery(‘选择器’),本质上是哈希