1.利用index计数
避免了函数的闭包问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.list {
list-style: none;
}
.li {
width: 50px;
height: 50px;
background-color: red;
float: left;
margin-left: 10px;
text-align: center;
line-height: 50px;
}
</style>
</head>
<body>
<ul class="list">
<li class="li">0</li>
<li class="li">1</li>
<li class="li">2</li>
<li class="li">3</li>
<li class="li">4</li>
</ul>
<script>
var li = document.querySelectorAll('.li')
for (var i = 0; i < li.length; i++) {
li[i].index = i //每一个类的index属性都来接收i的值方便计数
li[i].onclick = function () {
console.log(this.index);
}
}
</script>
</body>
</html>
2.点击事件重置属性
避免了for循环的使用,节省了时间空间
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.btn {
box-sizing: border-box;
border: 1px solid transparent;
outline: none;
}
.ck {
border: 1px solid rgb(185, 5, 5);
}
</style>
</head>
<body>
<button class="btn ck">按钮</button>
<button class="btn">按钮</button>
<button class="btn">按钮</button>
<button class="btn">按钮</button>
<script>
var btn = document.getElementsByClassName('btn')
var saveBtn = null //创建空变量
saveBtn = btn[0] //第一个元素有ck这个类
for (var i = 0; i < btn.length; i++) {
btn[i].onclick = function () {
saveBtn.classList.remove('ck') //删除第一个元素的ck类
this.classList.add('ck') //点击元素获得ck类
saveBtn = this //把获得ck类的值赋给saveBtn以便于下次删除
}
}
</script>
</body>
</html>
3.创建动态元素(鼠标移入显示,移出消失)
必须在外面创建空变量来接收创建的新变量,不能在事件内创建变量接收,否则鼠标移出失效,局部变量无法在移出事件内取到
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
width: 100px;
height: 100px;
background-color: black;
}
</style>
</head>
<body>
<div class="box"></div>
<script>
var box = document.querySelector('.box')
var newElement = null //外部创建空变量来接收新创建的元素
box.onmouseenter = function () {
newElement = document.createElement('div')
newElement.style.width = 50 + 'px'
newElement.style.height = 50 + 'px'
newElement.style.backgroundColor = 'red'
box.append(newElement)
}
box.onmouseleave = function () {
newElement.remove()
}
</script>
</body>
</html>
4.事件委托
两个获取目标元素的方法
event.target
event.srcElement
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul class="list">
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
var list = document.querySelector('.list')
list.onclick = function (e) {
if (e.target.nodeName.toLowerCase() == "li") {
console.log('1');
}
}
</script>
</body>
</html>