美文网首页
使用jQuery实现classList以及setText

使用jQuery实现classList以及setText

作者: Save_Onfir3 | 来源:发表于2018-09-15 21:32 被阅读0次

    首先在head或者body中添加script标签,src指向jquery.js或jquery.min.js文件的地址。

    在js里写如下代码

    window.jQuery = function(nodeOrSelector){
      let nodes = {} //申明一个nodes,这里就是所有获取到的node。
      //因为jquery不仅仅支持node,也支持选择器,所以参数给一个nodeOrSelector,然后做一下类型检测
      if (typeof nodeOrSelector === 'string'){
        let temp = document.querySelectorAll(nodeOrSelector) //返回与选择器匹配的文档中的元素列表,返回的对象是NodeList,它是一个伪数组
        for(let i = 0; i < temp.length; i++){
          nodes[i] = temp[i]
        } 
        nodes.length = temp.length //不需要NodeList,做一个临时变量以得到一个纯净的原型链
      } else if (nodeOrSelector instanceof Node){
        nodes = {     //伪数组,返回的东西要保持一致性,上面是伪数组,那么下面也得是伪数组。
        0 : nodeOrSelector,   
        length: 1
      }
    }
    
    //在这个hash里添加方法对象去操作节点
      nodes.addClass = function(node,classes){
        for(let key in classes){
          var value = classes[key]
          var methodName = value ? 'add':'remove'
          node.classList[methodName](key)
        }
        //classes.forEach((value) => {for(let i = 0; i < nodes.length; i++){nodes[i].classList.add(value)}})
      }
     
      nodes.text = function(text){
        if(text === undefined){
          var texts = []
        for(let i = 0; i < nodes.length; i ++){
          texts.push(nodes[i].textContent)//没有输入,意味着获取文本元素
        }
        return texts
        }else{
          for(let i = 0; i < nodes.length; i++){
          nodes[i].textContent = text//存在输入值,则意味着设置文本
        }
       }
      }
      return nodes
    }
    
    var $div = $('div')
    $div.addClass('red')
    $div.text('hi')
    

    jQuery实质上是一个构造函数,它接受一个参数,这个参数可能是一个节点,它返回一个新的对象,这个新的对象里有新的API,用来去操作这个参数。

    相关文章

      网友评论

          本文标题:使用jQuery实现classList以及setText

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