博主信息
博文 35
粉丝 0
评论 0
访问量 28993
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
事件冒泡和事件代理、字符串API
三九三伏
原创
459人浏览过

一、事件冒泡和事件代理

1. 事件冒泡:

元素事件的触发,默认会向上(父级)传递,当父级元素有同名事件时,会被自动触发,这种传递默认可以传至window。

  1. ...
  2. <body>
  3. ...
  4. <ul>
  5. <li>item1</li>
  6. <li>item2</li>
  7. <li>item3</li>
  8. <li>item4</li>
  9. <li>item5</li>
  10. </ul>
  11. <script>
  12. const items = document.querySelectorAll('li');
  13. console.log(items);
  14. items.forEach((item)=>(item.onclick = ()=>{
  15. console.log(event);
  16. //事件目标
  17. console.log(event.target);
  18. //事件主体
  19. console.log(event.currentTarget);
  20. }));
  21. document.querySelector('ul').onclick = (()=>console.log('li的父级ul:',event.currentTarget));
  22. document.body.onclick = (()=>console.log('ul的父级body:',event.currentTarget));
  23. document.documentElement.onclick = (()=>console.log('body的父级html:',event.currentTarget));
  24. document.onclick = (()=>console.log('html的父级document:',event.currentTarget));
  25. window.onclick = (()=>console.log('document的父级window:',event.currentTarget));
  26. </script>
  27. ...
  28. </body>

点击item1,效果如下:

阻止事件冒泡

  1. ...
  2. <body>
  3. ...
  4. <script>
  5. ...
  6. //阻止冒泡
  7. event.stopPropagation();
  8. ...
  9. </script>
  10. ...
  11. </body>

点击li元素将不再有事件冒泡

2.事件委托/事件代理

将子元素事件委托在父元素的事件上触发,以简化代码。在事件代理/委托时,事件目标(target)和事件主体(currentTarget)是不一样的。

  1. ...
  2. <body>
  3. ...
  4. <ul>
  5. <!-- 自定义属性data-index是为了便于区分事件的触发者 -->
  6. <li data-index="1">item1</li>
  7. <li data-index="2">item2</li>
  8. <li data-index="3">item3</li>
  9. <li data-index="4">item4</li>
  10. <li data-index="5">item5</li>
  11. </ul>
  12. <script>
  13. const ul = document.querySelector('ul');
  14. ul.onclick = ()=>{
  15. // target事件目标li,子元素,dataset.index引用li中data-index的值
  16. console.log('event.target:',event.target,event.target.dataset.index);
  17. // currentTarget事件主体ul,onclick是绑定在父元素ul上的
  18. console.log('event.currentTarget:',event.currentTarget);
  19. };
  20. </script>
  21. ...
  22. </body>

选择点击li效果如下:

二、 字符串API示例

  1. ...
  2. <body>
  3. ...
  4. <script>
  5. let str = 'php中文网';
  6. //转成大写
  7. console.log(str.toUpperCase());
  8. // 转成字符数组
  9. const arr = str.split('');
  10. console.log(str.split(''));
  11. console.log(arr[0],arr[4]);
  12. // 搜索
  13. console.log(str.startsWith('p')); //以“p”开头
  14. console.log(str.endsWith('网')); //以“网”结尾
  15. //处理
  16. console.log(str.slice(-3)); //保留倒数三个字符
  17. console.log(str.slice(-3).padStart(str.length,'*')); //从0-倒数第三个之间用*遮盖
  18. console.log(str.length);
  19. console.log(str.charAt(2));
  20. console.log(str.indexOf('中'));
  21. console.log(str.concat('(','https://php.cn',')'));
  22. console.log(str.replace('中文网','cn'));
  23. console.log(str.slice(0,3));
  24. console.log(str.substr(0,4));
  25. console.log(str.substr(-3,3));
  26. </script>
  27. ...
  28. </body>

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学