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