[聚合文章] 一个优秀的项目经理与JQuery的故事

jQuery 1900-01-01 16 阅读

本文是对jQuery的起源的初步探索。先通过两个函数来扩展原生DOM的操作,然后引入命名空间以及对其重构,接着将该命名空间扩大到Node上,改造一个自己的Node2,引出jQuery。

引子

  • 首先,我有一个需求===========> 要获得一个<li>标签的所有兄弟元素。
<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>JS Bin</title></head><body>  <ul>    <li id="item1">选项1</li>    <li id="item2">选项2</li>    <li id="item3">选项3</li>    <li id="item4">选项4</li>    <li id="item5">选项5</li>    <li id="item6">选项6</li>  </ul></body></html>

此时你刚学完原生DOM操作,知道有nextSibling previousSibling parentNode。你发现貌似没有直接一下子获得全部兄弟元素的API啊,身为一个优秀的90后,你果断手写一个函数实现这个需求啊。

function getSiblings(node){  var allChild = item2.parentNode.children   var childObj = {length: 0}  for (let i = 0; i < allChild.length; i++){    if (allChild[i] !== node){       childObj[childObj.length] = allChild[i]       childObj.length += 1    }  }  return childObj}

好了,以上的函数就能满足需求了,它接受你传入的某个元素,返回包含这个元素所有兄弟元素的伪数组。

注意: 要用item2.parentNode.children 这样子才不会获得文本节点。所以你想获得item2的所有兄弟,只需要getSiblings(item2)

获得所有兄弟的演示地址============>demo

  • 你刚解决了一个问题,领导又给你提了一个需求,让你给<li>添加一个类

领导还没说完,你立马想到了,直接item2.classList.add('类名')啊,哈哈,我好聪明啊,不愧是优秀的90后。

给你任意一个元素要直接加上这个类名,别给我的一个一个的加,太二了,如果元素原来有一个不应该存在的类名,给我删了,领导接着说完全部的需求。

这...看来不能item1.classList.add('类名') item2.classList.add('类名') item3.classList.add('类名')这么弱智的干了啊,那我还用函数嘛,你灵机一动。

嗯,不愧是善于思考的90后

function addClass(node, classes){  for (var key in classes){    var value = classes[key]    if (value){      node.classList.add(key)    } else{      node.classList.remove(key)    }
                

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。