• Web APIs 第03天上


    学习目标:

    能够使用removeChild()方法删除节点

    能够完成动态生成表格案例

    能够使用传统方式和监听方式给元素注册事件

    能够说出事件流执行的三个阶段

    能够在事件处理函数中获取事件对象

    能够使用事件对象取消默认行为

    能够使用事件对象阻止事件冒泡

    能够使用事件对象获取鼠标的位置

    能够完成跟随鼠标的天使案例

    能够说出常用的3-5个键盘事件

    能够知道如何获取当前键盘按下的是哪个键

    1.1. 节点操作

    1.1.1 删除节点

     node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。

    1. <button>删除</button>
    2. <ul>
    3. <li>熊大</li>
    4. <li>熊二</li>
    5. <li>光头强</li>
    6. </ul>
    7. <script>
    8. // 1.获取元素
    9. var ul = document.querySelector('ul');
    10. var btn = document.querySelector('button');
    11. // 2. 删除元素 node.removeChild(child)
    12. // ul.removeChild(ul.children[0]);
    13. // 3. 点击按钮依次删除里面的孩子
    14. btn.onclick = function() {
    15. if (ul.children.length == 0) {
    16. this.disabled = true;
    17. } else {
    18. ul.removeChild(ul.children[0]);
    19. }
    20. }
    21. </script>

    1.1.2 案例:删除留言

     

    1. <textarea name="" id=""></textarea>
    2. <button>发布</button>
    3. <ul>
    4. </ul>
    5. <script>
    6. // 1. 获取元素
    7. var btn = document.querySelector('button');
    8. var text = document.querySelector('textarea');
    9. var ul = document.querySelector('ul');
    10. // 2. 注册事件
    11. btn.onclick = function() {
    12. if (text.value == '') {
    13. alert('您没有输入内容');
    14. return false;
    15. } else {
    16. // console.log(text.value);
    17. // (1) 创建元素
    18. var li = document.createElement('li');
    19. // 先有li 才能赋值
    20. li.innerHTML = text.value + "<a href='javascript:;'>删除</a>";
    21. // (2) 添加元素
    22. // ul.appendChild(li);
    23. ul.insertBefore(li, ul.children[0]);
    24. // (3) 删除元素 删除的是当前链接的li 它的父亲
    25. var as = document.querySelectorAll('a');
    26. for (var i = 0; i < as.length; i++) {
    27. as[i].onclick = function() {
    28. // 删除的是 li 当前a所在的li this.parentNode;
    29. ul.removeChild(this.parentNode);
    30. }
    31. }
    32. }
    33. }
    34. </script>

     

    1.1.3 复制(克隆)节点

     

    1. <ul>
    2. <li>1111</li>
    3. <li>2</li>
    4. <li>3</li>
    5. </ul>
    6. <script>
    7. var ul = document.querySelector('ul');
    8. // 1. node.cloneNode(); 括号为空或者里面是false 浅拷贝 只复制标签不复制里面的内容
    9. // 2. node.cloneNode(true); 括号为true 深拷贝 复制标签复制里面的内容
    10. var lili = ul.children[0].cloneNode(true);
    11. ul.appendChild(lili);
    12. </script>

    1.1.4 案例:动态生成表格

     

    1. <script>
    2. // 1.先去准备好学生的数据
    3. var datas = [{
    4. name: '魏璎珞',
    5. subject: 'JavaScript',
    6. score: 100
    7. }, {
    8. name: '弘历',
    9. subject: 'JavaScript',
    10. score: 98
    11. }, {
    12. name: '傅恒',
    13. subject: 'JavaScript',
    14. score: 99
    15. }, {
    16. name: '明玉',
    17. subject: 'JavaScript',
    18. score: 88
    19. }, {
    20. name: '大猪蹄子',
    21. subject: 'JavaScript',
    22. score: 0
    23. }];
    24. // 2. 往tbody 里面创建行: 有几个人(通过数组的长度)我们就创建几行
    25. var tbody = document.querySelector('tbody');
    26. // 遍历数组
    27. for (var i = 0; i < datas.length; i++) {
    28. // 1. 创建 tr行
    29. var tr = document.createElement('tr');
    30. tbody.appendChild(tr);
    31. // 2. 行里面创建单元格td 单元格的数量取决于每个对象里面的属性个数
    32. // 使用for in遍历学生对象
    33. for (var k in datas[i]) {
    34. // 创建单元格
    35. var td = document.createElement('td');
    36. // 把对象里面的属性值 datas[i][k] 给 td
    37. td.innerHTML = datas[i][k];
    38. tr.appendChild(td);
    39. }
    40. // 3. 创建有删除2个字的单元格
    41. var td = document.createElement('td');
    42. td.innerHTML = '<a href="javascript:;">删除 </a>';
    43. tr.appendChild(td);
    44. }
    45. // 4. 删除操作 开始
    46. var as = document.querySelectorAll('a');
    47. for (var i = 0; i < as.length; i++) {
    48. as[i].onclick = function() {
    49. // 点击a 删除 当前a 所在的行(链接的爸爸的爸爸) node.removeChild(child)
    50. tbody.removeChild(this.parentNode.parentNode)
    51. }
    52. }
    53. </script>

    1.1.5 创建元素的三种方式

     

    1. <script>
    2. // 三种创建元素方式区别
    3. // 1. document.write() 创建元素 如果页面文档流加载完毕,再调用这句话会导致页面重绘
    4. var btn = document.querySelector('button');
    5. btn.onclick = function() {
    6. document.write('<div>123</div>');
    7. }
    8. // 2. innerHTML 创建元素
    9. var inner = document.querySelector('.inner');
    10. for (var i = 0; i <= 100; i++) {
    11. inner.innerHTML += '<a href="#">百度</a>'
    12. }
    13. var arr = [];
    14. for (var i = 0; i <= 100; i++) {
    15. arr.push('<a href="#">百度</a>');
    16. }
    17. inner.innerHTML = arr.join('');
    18. // 3. document.createElement() 创建元素
    19. var create = document.querySelector('.create');
    20. for (var i = 0; i <= 100; i++) {
    21. var a = document.createElement('a');
    22. create.appendChild(a);
    23. }
    24. </script>

    1.1.6 innerTHML和createElement效率对比

    innerHTML字符串拼接方式(效率低)

    1. <script>
    2. function fn() {
    3. var d1 = +new Date();
    4. var str = '';
    5. for (var i = 0; i < 1000; i++) {
    6. document.body.innerHTML += '<div style="width:100px; height:2px; border:1px solid blue;"></div>';
    7. }
    8. var d2 = +new Date();
    9. console.log(d2 - d1);
    10. }
    11. fn();
    12. </script>

     createElement方式(效率一般)

    1. <script>
    2. function fn() {
    3. var d1 = +new Date();
    4. for (var i = 0; i < 1000; i++) {
    5. var div = document.createElement('div');
    6. div.style.width = '100px';
    7. div.style.height = '2px';
    8. div.style.border = '1px solid red';
    9. document.body.appendChild(div);
    10. }
    11. var d2 = +new Date();
    12. console.log(d2 - d1);
    13. }
    14. fn();
    15. </script>

     innerHTML数组方式(效率高)

    1. <script>
    2. function fn() {
    3. var d1 = +new Date();
    4. var array = [];
    5. for (var i = 0; i < 1000; i++) {
    6. array.push('<div style="width:100px; height:2px; border:1px solid blue;"></div>');
    7. }
    8. document.body.innerHTML = array.join('');
    9. var d2 = +new Date();
    10. console.log(d2 - d1);
    11. }
    12. fn();
    13. </script>

    1.2. DOM的核心总结

     

     

     

    关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。

    1.2.1. 创建

     1.2.2. 增加

    1.2.3. 删

    1.2.4. 改

    1.2.5. 查

    1.2.6. 属性操作

     

    1.2.7. 事件操作(重点)

  • 相关阅读:
    SAP PI PO 接口常见问题处理:队列平衡的统计平均分配
    江西建筑模板厂家-能强优品木业
    大模型日报|今日必读的7篇大模型论文
    EM@坐标@函数@图象的对称和翻折变换
    如何用Python优雅的合并两个Dict
    解决方案:读取两个文件夹里不同名的文件,处理映射不对应的文件
    【ARM+Codesys案例】基于全志T3+Codesys软PLC的3C点胶边缘控制解决方案:整合了运动控制、视觉、激光测高等技术
    RabbitMQ高级特性 - 生产者消息确认机制
    Windows 下安装NPM
    AppWeb认证绕过漏洞(CVE-2018-8715)
  • 原文地址:https://blog.csdn.net/DIUDIUjiang/article/details/125478775