批改状态:合格
老师批语:更多的dom原生操作可以查手册, MDN,或者阅读:JavaScript权威指南, JavaScript高级程序设计
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;三、元素的类型和节点的属性
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();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代码:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>DOM对象</title></head><body><div id="list"><ul class="poster"><li name="active">战胜疫情, 指日可待</li><li>全民动员, 支持国家</li><li>我宅家,我骄傲,我为国家省口罩</li></ul></div><script>console.log(document);console.log(window.document);console.log(document.doctype);console.log(document.documentElement);console.log(document.head);console.log(document.body);console.log(document.title);console.log('获取页面元素…………………………………………')var ul=document.getElementsByTagName('li');console.log(ul);console.log(ul[1]);console.log(ul.item(2));var div=document.getElementById('list');console.log(div);// console.log(document.namedItem('list'));这是无法访问的var div= document.getElementsByTagName('div');console.log(div);console.log(div.namedItem('list'));var cla=document.getElementsByClassName('poster');console.log(cla);console.log(cla.item(0));var div = document.querySelector('#list');console.log(div);var lis=document.querySelectorAll('#list>.poster>li');console.log(lis);console.log(lis[2]);console.log(lis.item(1));console.log("^^^^^^^^^^^^^^^^^^")Array.from(lis).forEach(item=>console.log(item));Array.from(lis).forEach(function(item){console.log(item)});lis.forEach(function(item){console.log(item)});</script></body></html>
1.2运行结果图:
2.1代码:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><div id="box"><h2>JavaScript</h2><p>通用前端脚本语言</p><li>学习让我感到很充实</li></div><p><a href="https://www.php.cn">PHP中文网</a></p><script>var link=document.links;console.log(link);console.log(link.item(0));var a=link.item(0);console.log(a.nodeName);console.log(a.nodeType);console.log(a.nodeValue);console.log(a);console.log(a.firstChild.nodeValue);var div = document.querySelector('div');console.log(div);console.log('^^^^^^^^^^^^^^^^^^^^^^^^')div1=div.childNodes;console.log(div.childElementCount);console.log(div1.length);console.log(div1);Array.from(div1).forEach(item=>console.log(item));div2=div.children;console.log(div2);Array.from(div2).forEach(item=>console.log(item));console.log(div.firstElementChild);console.log(div.lastElementChild);console.log(div.children.item(1));console.log('……………………………………………………………………')var li=document.getElementsByTagName('li');console.log(li.item(0));console.log('父级元素/父级节点')console.log(li.item(0).parentElement);console.log(li.item(0).parentNode);</script></body></html>
2.2运行结果图
3.1代码:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><button onclick="alert(this.firstChild.nodeValue)">点击我</button><button>点我试试看</button><a href="">PHP中文网</a><script>var ul=document.createElement('ul');// h1.innerHTML='你好';document.body.appendChild(ul);// var ul = document.querySelector('ul');// console.log(ul);var frag=document.createDocumentFragment();for(var i=0;i<5;i++){var li = document.createElement('li');li.innerText='列表项'+(i+1);// console.log(li)frag.appendChild(li);}ul.appendChild(frag);var btn=document.querySelectorAll('button').item(1);// console.log(btn);btn.addEventListener('mouseover',function(ev){// console.log(ev.target);// console.log(ev.type);ev.target.style = 'width:100px;height:50;background: lightgreen;border:none;outline: none;'},false);btn.addEventListener('mouseout',function(ev){// console.log(ev.target);// console.log(ev.type);ev.target.style = 'none'},false);var link=document.links.item(0);link.onclick=function(cc){cc.preventDefault();btn.style.display='none';}</script></body></html>
3.2运行结果:
1、ToDoList案例
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>ToDoList</title></head><body><form action="" name="comment" method="post"><label for="content">请留言:</label><input type="text" name="content"><button>提交</button></form><ul></ul><script>// 获取表单和ulvar form=document.forms.namedItem('comment');var ul=document.querySelector('ul');// 监听submit提交事件,addEventListener('submit',function(ev){ev.preventDefault();var li=document.createElement('li');// li.innerHTML=form.content.value;// ul.appendChild(li);// 判断留言是否为空,空则不能添加if(form.content.value.trim().length===0){alert('留言不能为空');form.content.focus();}else{li.innerHTML=form.content.value+'<a href="" onclick="del(this)">删除</a>';// 判断ul是否有元素、分别处理if(ul.childElementCount===0){// 无元素直接插入ul.appendChild(li);}else{// 有元素插入到第一个元素前面ul.insertBefore(li,ul.firstElementChild);}}// 清空留言并获取焦点form.content.value='';form.content.focus();},false);function del(str){this.event.preventDefault();return confirm('是否删除?') ? ul.removeChild(str.parentElement):false;}</script></body></html>
2、运行结果:
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号