实现getSiblings和addClass的功能
网页HTML部分:1
2
3
4
5
6
7
8
9
10<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>
getSiblings
1
2
3
4
5
6
7
8let allChildren = item3.parentNode.children
let array = {length: 0}
for(let i = 0; i < allChildren.length; i++){
if(allChildren[i] !== item3){
array[array.length] = allChildren[i]
array.length += 1
}
}addClass
1
2
3
4
5
6
7
8
9let classes = {'a': true, 'b': false, 'c': true}
for(let key in classes){
let value = classes[key]
if(value){
item3.classList.add(key)
}else{
item3.classList.remove(key)
}
}
封装原生函数
1 | function getSiblings(node){ |
1 | function addClass(node, classes){ |
命名空间
1 | function getSiblings(node){ |
扩展 Node 接口
直接在 Node.prototype 上加函数1
2
3
4
5
6
7
8
9
10
11
12
13Node.prototype.getSiblings = function(){
let allChildren = this.parentNode.children
let array = {length: 0}
for(let i = 0; i < allChildren.length; i++){
if(allChildren[i] !== this){
array[array.length] = allChildren[i]
array.length += 1
}
}
return array
}
item3.getSiblings()
1 | Node.prototype.addClass = function(classes){ |
无侵入添加 Node 接口
1 | window.Node2 = function(node){ |
添加接受选择器功能
1 | window.jQuery = function(nodeOrSelector){ |
添加接受多个选择器功能
1 | window.jQuery = function(nodeOrSelector){ |
div 和 $div 的联系和区别
1.区别:
$div 是一个 jQuery 对象,可以使用 jQuery 的的属性方法,比如addClass removeClass toggleClass 等
(一般情况下使用 jQuery 获取到的元素应该在变量命名时在前边加上 $ 符号以便区分。)
div 是一个 DOM 对象,可以使用 DOM API 的属性和方法,比如firstChid、parentNode、appendChild等。
2.联系:
使用$(div)
可以将 div 封装成一个 jQuery 对象。
使用$(div)[0]
获取到的第一项就是 div,所以可以使用这种方法将 $div 变成 div。