初步实现 jQuery 思想的细节记录

window.jQuery = function (nodeOrSelector){ //在全局环境下创建 jQuery 对象,创建之初想到节点有可能是字符串的情况
    let nodes = {}                        //创建一个容纳所有符合条件的节点纯对象组
    if (typeof nodeOrSelector === 'string') {  //判断传入的节点类型是否为字符串
        let temp = document.querySelector(nodeOrSelector)    //如果为字符串,则获取所有符合条件的节点,返回一个伪数组
        for(let i = 0;i< temp.length;i++){    //遍历这个得到的伪数组
            nodes[i] = temp[i]    //  将伪数组内的内容传给空对象 nodes
    }
    nodes.length = temp.length     // 传递完毕,将伪数组内的 length 属性的 key 及value传给 nodes 对象
    } else if(nodeOrSelector instanceof Node){    //如果函数传入的参数确为节点
            nodes = {                             //将参数传给 nodes 对象的第一个属性‘0’中,同时设定对象内的 length 值为1
                0:nodeOrSelector,
                length:1
            }
    }
  
    nodes.addClass:function(value){            //为 nodes 对象设定方法‘addClass’,方法参数为 value
          for(let i=0; i<nodes.length;i++){          //遍历 nodes 对象内的所有属性,也就是节点
              nodes[i].classList.add(value)        //为 nodes 内每个属性(也就是节点)的class 加上传入的 value 值
          }
      },
    nodes.setText:fucntion(value){              //为 nodes 对象设定方法‘setText’,方法参数为 value
        for(let i=0; i<nodes.length;i++){        //遍历 nodes 对象内的所有属性,也就是节点
              node[i].textContent = value        //给 nodes 内每个属性(也就是节点)的文本替换为传入的 value 值
          }
      }
  return nodes                                         //返回 nodes 对象
}
window.$ = jQuery

var $div = $('div')
$div.addClass('red') // 可将所有 div 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容