DOM事件中的几种常见问题

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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值