0%

fe.js

备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
var log = function() {
console.log.apply(console, arguments)
}

var e = function(selector) {
return document.querySelector(selector)
}

var es = function (selector) {
return document.querySelectorAll(selector)
}

var appendHtml = function(element, html) {
element.insertAdjacentHTML('beforeend', html)
}

var bindEvent = function(element, eventName, callback) {
element.addEventListener(eventName, callback)
}

var toggleClass = function(element, className) {
if (element.classList.contains(className)) {
element.classList.remove(className)
} else {
element.classList.add(className)
}
}

var removeClassAll = function(className) {
var selector = '.' + className
var elements = document.querySelectorAll(selector)
for (var i = 0; i < elements.length; i++) {
var e = elements[i]
e.classList.remove(className)
}
}

var bindAll = function(selector, eventName, callback) {
var elements = document.querySelectorAll(selector)
for(var i = 0; i < elements.length; i++) {
var e = elements[i]
bindEvent(e, eventName, callback)
}
}

// find 函数可以查找 element 的所有子元素
var find = function(element, selector) {
return element.querySelector(selector)
}

var closestClass = function(element, className) {
var e = element
while (e != null) {
if (e.classList.contains(className)) {
return e
} else {
e = e.parentElement
}
}
}

var closestId = function(element, idName){
/*
element 是一个 DOM 元素
idName 是一个 string
循环查找 element 的直系父元素
如果父元素拥有 idName 这个 id, 则返回这个父元素
如果找到 document 都还没有, 则返回 null
*/
var e = element
while (e != null) {
// 判断 e 是否包含 idName 这个 id
if (e.id == idName) {
return e
} else {
e = e.parentElement
}
}
}

var closestTag = function(element, tagName){
/*
element 是一个 DOM 元素
tagName 是一个 string
循环查找 element 的直系父元素
如果父元素是一个 tagName 标签, 则返回这个父元素
如果找到 document 都还没有, 则返回 null

tagName 是 'div' 'p' 'h1' 这样的标签名
获取一个 DOM 元素的标签名的方法如下
element.tagName
需要注意的是, tagName 属性返回的标签名是大写的
例如 'DIV' 'H1'
所以你在比较的时候需要把 tagName 转换为大写字母
使用如下 js 标准库函数转换
tagName.toUpperCase()
*/
var e = element
while (e != null) {
// 判断 e 是否和 tagName 相等
if (e.tagName.toUpperCase() == idName.toUpperCase()) {
return e
} else {
e = e.parentElement
}
}
}

var closest = function(element, selector){
/*
element 是一个 DOM 元素
selector 是一个 string, 表示一个选择器
可能的值是 'div' '#id-div-gua' '.red' 这三种

循环查找 element 的直系父元素
如果父元素符合选择器, 则返回这个父元素
如果找到 document 都还没有, 则返回 null
*/
var flag = selector[0]
if (flag == '.') {
var className = selector.slice(1)
return closestClass(element, className)
} else if (flag == '#') {
var idName = selector.slice(1)
return closestId(element, idName)
} else {
var tag = selector
return closestId(element, tag)
}
}