博客列表 >02月27日作业:DOM和事件的原理和应用

02月27日作业:DOM和事件的原理和应用

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2020年03月01日 10:19:13882浏览

作业一(文档对象模型DOM)

DOM参考手册:
https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model
一:节点相关知识:
1、节点时DOM树种的最小单元:节点是有类型的:元素、文本、文档、注释、片段等
2、document:(window.document)获取文档;定义的快速入口:

  • document.doctype:获得文档类型
  • document.documentElement:获取文档种的根节点
  • document.head:获取head节点
  • document.body:获取body节点
  • document.title:获取head中的title节点
    document.links:获取a链接的节点;

二、获取页面元素的方式:
1、标签名:返回一个html对象集合:

  • 语法:document.getElementsByTagName()
  • 访问返回集合中的元素:索引数组方式和item(n)

2、ID:返回一个对象

  • 语法:document.getElementById(id)替代语法:用标签名访问返回对象集合在用namedItem(id)访问,namedItem()也可以访问name属性来返回;
  • 允许在元素级别上调用getElementsByTagName()getElementById()

3、class:返回一个html集合,类数组

  • 语法:getElementsByClassName()
  • 访问返回集合中的元素:索引数组方式和item(n)

4、直接使用css选择器来获取元素:

  • 语法:query.Selector()返回匹配选择器的第一个元素 和 query.SelectorAll()返回所有匹配选择器的元素集合NodeList;
  • 访问方式:可以通过forEach()访问和item(n);

三、元素的类型和节点的属性
1、页面返回二种类型的集合:HTMLCollection,NodeList;
2、Node节点(元素节点、属性、文本节点)对象有三个非常重要的属性:nodeName,nodeType,nodeValue(只有文本节点时,这个属性才有意义);
3、childnodes:返回值种包括了所有类型的节点(Tips:换行符会当成文本节点)
4、firstChild:第一个子节点;lastChild:最后一个子节点;childElementCount:统计html标签元素的数量;children:返回html标签元素的集合
5、Array.from():将类数组转为真正的数组对象
6、firstElemetChild:获取第一个子元素;lastElementChild:获取最后一个子元素;
children.item():获取任何一个子元素:也可以用索引访问
7、访问父节点:parentNode;访问父元素parentElement;
四、元素的添加和删除:
1、元素的添加步骤:

  • 创建元素:var h2=createElement('h1');
  • 给元素添加内容:h2.innerHTML='我是元素内容';
  • 添加元素到页面中(已存在的父节点中):document.body.appendChild(h2);

2、利用片段优化添加多个元素:

  • 创建片段:var frag=document.createDocumentFragment();
  • 利用循环把元素(li)加载到临时挂在点上:即文档片段上:frag.appendChild(li);(tips:片段(挂载点)可以接受多个元素)

3、添加挂载点到文档中(父节点中);ul.appendChild(frag);
五、事件
1、html标签属性:onclick="alert()"点击触发弹窗;
2、事件监听函数:addEventListener(时间名称自付串,事件的回调函数,false(触发模式:冒泡));
扩充:ev.type:事件的行为;ev.target:获取发生事件的对象
3、禁用点击后ev的默认事件:ev.preventDefault();
4、获取焦点:focus();去除首位空格:trim();length:长度属性;
5、insertBefore(要插入的元素,要插入元素的位置:那个元素之前);
6、this.event.preventDefault();禁用当前事件的默认行为;
7、removeChild();移除函数;
8、confirm():获取(弹窗提示确认和取消)的函数;确认返回true,取消返回false;

作业二

一、代码练习:
1.1代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>DOM对象</title>
  6. </head>
  7. <body>
  8. <div id="list">
  9. <ul class="poster">
  10. <li name="active">战胜疫情, 指日可待</li>
  11. <li>全民动员, 支持国家</li>
  12. <li>我宅家,我骄傲,我为国家省口罩</li>
  13. </ul>
  14. </div>
  15. <script>
  16. console.log(document);
  17. console.log(window.document);
  18. console.log(document.doctype);
  19. console.log(document.documentElement);
  20. console.log(document.head);
  21. console.log(document.body);
  22. console.log(document.title);
  23. console.log('获取页面元素…………………………………………')
  24. var ul=document.getElementsByTagName('li');
  25. console.log(ul);
  26. console.log(ul[1]);
  27. console.log(ul.item(2));
  28. var div=document.getElementById('list');
  29. console.log(div);
  30. // console.log(document.namedItem('list'));这是无法访问的
  31. var div= document.getElementsByTagName('div');
  32. console.log(div);
  33. console.log(div.namedItem('list'));
  34. var cla=document.getElementsByClassName('poster');
  35. console.log(cla);
  36. console.log(cla.item(0));
  37. var div = document.querySelector('#list');
  38. console.log(div);
  39. var lis=document.querySelectorAll('#list>.poster>li');
  40. console.log(lis);
  41. console.log(lis[2]);
  42. console.log(lis.item(1));
  43. console.log("^^^^^^^^^^^^^^^^^^")
  44. Array.from(lis).forEach(item=>console.log(item));
  45. Array.from(lis).forEach(function(item){console.log(item)});
  46. lis.forEach(function(item){console.log(item)});
  47. </script>
  48. </body>
  49. </html>

1.2运行结果图:

2.1代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="box">
  9. <h2>JavaScript</h2>
  10. <p>通用前端脚本语言</p>
  11. <li>学习让我感到很充实</li>
  12. </div>
  13. <p><a href="https://www.php.cn">PHP中文网</a></p>
  14. <script>
  15. var link=document.links;
  16. console.log(link);
  17. console.log(link.item(0));
  18. var a=link.item(0);
  19. console.log(a.nodeName);
  20. console.log(a.nodeType);
  21. console.log(a.nodeValue);
  22. console.log(a);
  23. console.log(a.firstChild.nodeValue);
  24. var div = document.querySelector('div');
  25. console.log(div);
  26. console.log('^^^^^^^^^^^^^^^^^^^^^^^^')
  27. div1=div.childNodes;
  28. console.log(div.childElementCount);
  29. console.log(div1.length);
  30. console.log(div1);
  31. Array.from(div1).forEach(item=>console.log(item));
  32. div2=div.children;
  33. console.log(div2);
  34. Array.from(div2).forEach(item=>console.log(item));
  35. console.log(div.firstElementChild);
  36. console.log(div.lastElementChild);
  37. console.log(div.children.item(1));
  38. console.log('……………………………………………………………………')
  39. var li=document.getElementsByTagName('li');
  40. console.log(li.item(0));
  41. console.log('父级元素/父级节点')
  42. console.log(li.item(0).parentElement);
  43. console.log(li.item(0).parentNode);
  44. </script>
  45. </body>
  46. </html>

2.2运行结果图

3.1代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <button onclick="alert(this.firstChild.nodeValue)">点击我</button>
  10. <button>点我试试看</button>
  11. <a href="">PHP中文网</a>
  12. <script>
  13. var ul=document.createElement('ul');
  14. // h1.innerHTML='你好';
  15. document.body.appendChild(ul);
  16. // var ul = document.querySelector('ul');
  17. // console.log(ul);
  18. var frag=document.createDocumentFragment();
  19. for(var i=0;i<5;i++){
  20. var li = document.createElement('li');
  21. li.innerText='列表项'+(i+1);
  22. // console.log(li)
  23. frag.appendChild(li);
  24. }
  25. ul.appendChild(frag);
  26. var btn=document.querySelectorAll('button').item(1);
  27. // console.log(btn);
  28. btn.addEventListener('mouseover',function(ev){
  29. // console.log(ev.target);
  30. // console.log(ev.type);
  31. ev.target.style = 'width:100px;height:50;background: lightgreen;border:none;outline: none;'
  32. },false);
  33. btn.addEventListener('mouseout',function(ev){
  34. // console.log(ev.target);
  35. // console.log(ev.type);
  36. ev.target.style = 'none'
  37. },false);
  38. var link=document.links.item(0);
  39. link.onclick=function(cc){
  40. cc.preventDefault();
  41. btn.style.display='none';
  42. }
  43. </script>
  44. </body>
  45. </html>

3.2运行结果:

作业三

1、ToDoList案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ToDoList</title>
  6. </head>
  7. <body>
  8. <form action="" name="comment" method="post">
  9. <label for="content">请留言:</label>
  10. <input type="text" name="content">
  11. <button>提交</button>
  12. </form>
  13. <ul>
  14. </ul>
  15. <script>
  16. // 获取表单和ul
  17. var form=document.forms.namedItem('comment');
  18. var ul=document.querySelector('ul');
  19. // 监听submit提交事件,
  20. addEventListener('submit',function(ev){
  21. ev.preventDefault();
  22. var li=document.createElement('li');
  23. // li.innerHTML=form.content.value;
  24. // ul.appendChild(li);
  25. // 判断留言是否为空,空则不能添加
  26. if(form.content.value.trim().length===0){
  27. alert('留言不能为空');
  28. form.content.focus();
  29. }else{
  30. li.innerHTML=form.content.value+'<a href="" onclick="del(this)">删除</a>';
  31. // 判断ul是否有元素、分别处理
  32. if(ul.childElementCount===0){
  33. // 无元素直接插入
  34. ul.appendChild(li);
  35. }else{
  36. // 有元素插入到第一个元素前面
  37. ul.insertBefore(li,ul.firstElementChild);
  38. }
  39. }
  40. // 清空留言并获取焦点
  41. form.content.value='';
  42. form.content.focus();
  43. },false);
  44. function del(str){
  45. this.event.preventDefault();
  46. return confirm('是否删除?') ? ul.removeChild(str.parentElement):false;
  47. }
  48. </script>
  49. </body>
  50. </html>

2、运行结果:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议