美文网首页
实现一个 jQuery 的 API

实现一个 jQuery 的 API

作者: YukiWeng | 来源:发表于2019-08-16 17:41 被阅读0次

需要实现的效果:
1.可将所有 div 的 class 添加一个 red
2.可将所有 div 的 textContent 变为 hi
补全问号处的代码

window.jQuery = ???
window.$ = jQuery

var $div = $('div')
$div.addClass('red') 
$div.setText('hi') 

思路如下:
初始化一个hash对象
判断传入参数为字符串(选择器)还是节点
①若为字符串 => 寻找对应节点=>放入hash
②若为节点=>直接放入hash

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
      //这里用了一个中间变量temp只是为了让nodes结果更纯净,去掉也可以
    }else if(nodeOrSelector instanceof Node){
        nodes={
        0:nodeOrSelector,
        length:1
      }
    }

添加两个方法函数
使用DOM API

    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.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
      //这里用了一个中间变量temp只是为了让nodes结果更纯净,去掉也可以
    }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.$ = jQuery
var $div = $('div')
$div.addClass('red') 
$div.setText('hi')

优化:
代码中addClass方法一次只允许传一个值,若希望传多个class,可改为传数组,并使用forEach方法;
setText方法传值后,会覆盖掉原本的文本,若希望完善一些,可添加判断语句

nodes.addClass=function(classes){
    classes.forEach((value)=>{
        for(let i =0;i<nodes.length;i++){
            nodes[i].classList.add(value)
        }
    })
}

nodes.text=function(text){
    if(text===undefined){
        let text=[]
        for(i=0;i<nodes.length;i++){
            text.push(nodes[i].textContent)
        }
        return text
    }else{
        for(let i=0;i<nodes.length;i++){
            nodes[i].textContent=text}
        }
    }
    return nodes
}
$div.addClass(['red','blue']) //添加了两个class
$div.text('hi') // 用hi覆盖原文本
$div.text() // 返回文本

相关文章

  • 初探jQuery

    jQuery API的实现 自己模拟jQuery的一个API预览:http://js.jirengu.com/pa...

  • 如何实现一个jQuery的api

    什么是jQuery 实现jQuery的api 实现jQuery的api说起来也很简单,就是对DOM进行封装。话不多...

  • 实现一个 jQuery 的 API

    实现一个 jQuery 的 API 实现步骤 命名空间模式 这个模式的调用为jQuery.addClass(ite...

  • 前端基础入门五(掌握jQuery的常用api,实现动态效果)

    jQuery基本概念 学习目标:学会如何使用jQuery,掌握jQuery的常用api,能够使用jQuery实现常...

  • 用原生DOM实现一个jQuery的API

    今天第一次接触jQuery,先简单的实现一个jQuery的API,实现两个方法: addClass() setTe...

  • 实现一个 jQuery 的 API

    想要实现一个以下功能用原生js的DOM API来实现一个类jQuery API的功能 1、首先获取DOM元素 判断...

  • Angularjs选项卡

    用jQuery实现选项卡,通过操作dom节点实现,jQuery多数api方便操作dom。例如next()、sibl...

  • 2018-08-22

    实现JQuery之API 1.需求分析window.jQuery = ???window.div = div.ad...

  • 实现jQuery的API

    1. jQuery函数结构 jQuery函数要方便与输入一个选择器参数或则节点正确返回一个伪数组,便于对其明确执行...

  • 实现一个jQuery API

    通过以下四步实现jQuery: 接受一个node或选择器 封装成一个伪数组 在这个伪数组上加上几个API 把这个伪...

网友评论

      本文标题:实现一个 jQuery 的 API

      本文链接:https://www.haomeiwen.com/subject/cksqsctx.html