老师你好,事件委托问题
来源:2-7 实现垂直菜单
weixin_慕码人7523200
2021-11-30 22:43:36
记得老师之前将时间委托时,说最内层元素不能再有额外的内层元素了:
相关截图:
但是,在视频中老师给ul添加事件委托,li里面还有额外的内层元素:
相关截图:
这个让我相当疑惑,这是为什么?
还有,截图中为什么要先判断if(e.target.tagName.toLowerCase()=='li')然后再去e.target.getAttribute('data-t')呢,直接e.target.getAttribute('data-t')不行吗?
1回答
好帮手慕久久
2021-12-01
同学你好,解答如下:
1、事件委托的课程中,老师课件写的是如下形式:
但是在描述时,老师说的是“使用事件委托时,....,最好....,不要再创建内层元素了”(https://class.imooc.com/lesson/1626#mid=38889 12分40秒左右 )。“最好”这个词其实就隐含着,“可以嵌套内层元素”,但是此时可能存在一些不好处理的情况(如果处理不好,就可能出错),所以不推荐嵌套元素。但是如果我们能处理好,或者没有出现不好处理的情况,那么嵌套也是可以的。
2、本课程中,虽然li中内嵌了元素,但是使用事件委托时,我们能处理好各种情况,所以可以使用。
3、不能直接写成e.target.getAttribute('data-t'),因为li中有内嵌元素;鼠标移入li时,e.target获取的可能不是li自身,而是li的子元素,可以打印看一下:
如果获取的是li的子元素,由于子元素没有data-t属性,无法获取data-t属性,因此直接写e.target.getAttribute('data-t')会影响代码运行。
if(e.target.tagName.toLowerCase()=='li')这句代码的意思就是,判断一下我们移入的是不是li,如果移入的是li,才进一步获取data-t属性,然后做一系列操作,这样可以防止代码运行出错。
祝学习愉快!
相似问题
回答 3
回答 2