Blogger Information
Blog 145
fans 7
comment 7
visits 164611
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
02月27日作业:DOM和事件的原理和应用
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
Original
883 people have browsed it

作业一(文档对象模型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、运行结果:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:更多的dom原生操作可以查手册, MDN,或者阅读:JavaScript权威指南, JavaScript高级程序设计
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post