博客列表 >第三章 DOM操作

第三章 DOM操作

刘静的博客
刘静的博客原创
2020年08月21日 13:15:04817浏览

第三章 DOM操作

快速认识DOM

DOM(DOM Object Model):文档对象模型;

js对象分类三种:

  1. 用户定义对象

  2. 内建对象Array Date Math

  3. 宿主对象 例如:window对象

DOM中节点中分类

  1. 元素节点(element node)
  2. 文本节点(text node)
  3. 属性节点

[^没有内容的文档是没有任何价值的,大多数内容都是由文本提供]:

获取元素节点对象的方式

html代码:

  1. <h2 title="书籍">你要买什么课程?</h2>
  2. <p title="请您选择购买的课程">本课程是web全栈课程,期待你的购买!</p>
  3. <ul id="classList">
  4. <li class="item">JavaScript</li>
  5. <li class="item">css</li>
  6. <li>DOM</li>
  7. </ul>

1.document.getElementById(‘classList’) 单个对象

  1. var eleNode = document.getElementById('classList');
  2. console.log(eleNode);
  3. console.log(typeof eleNode);

2.document.getElementsByTagName() 获取出来的是一个节点对象集合

[^有点像数组,但不是数组]:

  1. var oLis = document.getElementsByTagName('li');
  2. var oTitle = document.getElementsByTagName('h2');
  3. console.log(oTitle[0]);
  4. console.log(oLis.length);
  5. for(var i =0;i<oLis.length;i++){
  6. console.log(oLis[i]);
  7. }
  8. console.log(typeof oLis);

3.document.getElementsByClassName(‘item’)

  1. var oItem = document.getElementsByClassName('item');
  2. console.log(oItem);

DOM中节点中分类

html代码:

  1. <h2>你要买什么课程?</h2>
  2. <p title="请您选择购买的课程">本课程是web全栈课程,期待你的购买!</p>
  3. <ul id="classList">
  4. <li class="item">JavaScript</li>
  5. <li class="item">css</li>
  6. <li>DOM</li>
  7. </ul>

在文档对象模型(DOM)中,每一个节点都是一个对象,DOM节点有三个重要属性:

  1. nodeName:节点名称;

    1.1nodeName属性:节点的名称,是只读

    1.2属性节点的nodeName与属性名相同

    1.3文本节点的nodeName永远是#Text

    1.4文档节点的nodeName永远是#document

  2. nodeValue:节点的值;

    2.1元素节点的nodeValue是undefined或null

    2.2文本节点的nodeValue是文本自身

    2.3属性节点的nodeValue是属性的值

  3. nodeType:节点类型;

    3.1节点的类型,是只读的

以下常用的几种节点类型:

元素类型 节点类型
元素 1
属性 2
文本 3
注释 8
文档 9
  1. //1.元素节点
  2. var oDiv = document.getElementById('box');
  3. console.log(oDiv.nodeName+"|"+oDiv.nodeValue+"|"+oDiv.nodeType);
  4. //2.获取属性节点
  5. var attrNode = oDiv.attributes[0];
  6. console.log(attrNode.nodeName+"|"+attrNode.nodeValue+"|"+attrNode.nodeType);
  7. //3.获取文本节点
  8. var textNode = oDiv.childNodes[0];
  9. console.log(textNode.nodeName+"|"+textNode.nodeValue+"|"+textNode.nodeType);
  10. //#text|我是一个文本节点|3
  11. var commentNode = oDiv.childNodes[1];
  12. console.log(commentNode.nodeName+"|"+commentNode.nodeValue+"|"+commentNode.nodeType);
  13. //#comment| 我是注释 |8
  14. console.log(document.nodeType);

setAttribute()和getAttribute()用法:

style代码:

  1. <style type="text/css">
  2. #box{
  3. color:red;
  4. }
  5. </style>

html代码:

  1. <h2 title="书籍">你要买什么课程?</h2>
  2. <p title="请您选择购买的课程">本课程是web全栈课程,期待你的购买!</p>
  3. <ul id="classList">
  4. <li class="item">JavaScript</li>
  5. <li class="item">css</li>
  6. <li>DOM</li>
  7. </ul>

javascript代码:

  1. var oP = document.getElementsByTagName('p')[0];
  2. //获取属性值有一个必需的参数,这个节点对象的名字
  3. var title = oP.getAttribute('title');
  4. var className = oP.getAttribute('class');
  5. console.log(title);
  6. console.log(className);
  7. //设置属性值setAttribute(name,value) 先静态,再动态
  8. oP.setAttribute('id','box');

节点对象的常用属性:

html代码:

  1. <div class="previous">我是上一个兄弟</div><div id="father"><p>lili</p><p>lili2</p></div><div class="sibling">我是兄弟</div>

JavaScript代码:

  1. var oFather = document.getElementById('father');
  2. console.log(oFather.childNodes);
  3. // console.log(oFather.childNodes[0].nodeType);//1
  4. console.log(oFather.childNodes[0]);//<p>lili</p>
  5. console.log(oFather.firstChild);
  6. console.log(oFather.childNodes[oFather.childNodes.length-1]);//<p>lili2</p>
  7. console.log(oFather.lastChild);
  8. console.log(oFather.parentNode);//body标签
  9. console.log(oFather.nextSibling);
  10. console.log(oFather.previousSibling);

节点对象属性在各浏览器兼容性处理:

html代码:

  1. <div class="previous">我是上一个兄弟</div>
  2. <div id="father">
  3. <p>lili</p>
  4. <p>lili2</p>
  5. </div>
  6. <div class="sibling">我是兄弟</div>

JavaScript代码:

  1. var oFather = document.getElementById('father');
  2. console.log(oFather.childNodes);
  3. function get_childNodes(fatherNode){
  4. var nodes = fatherNode.childNodes;
  5. var arr = [];
  6. for(var i = 0;i<nodes.length;i++){
  7. if(nodes[i].nodeType === 1){
  8. arr.push(nodes[i]);
  9. }
  10. }
  11. return arr;
  12. }
  13. var childnodes = get_childNodes(oFather);
  14. console.log(childnodes[0]);
  15. function get_nextSibling(n){
  16. var x = n.nextSibling;
  17. while(x && x.nodeType != 1){
  18. x = x.nextSibling;
  19. }
  20. return x;
  21. }
  22. console.log(get_nextSibling(oFather));

元素节点对象的增删改查方法:

动态的操作节点:

  1. 创建节点 createElement()

  2. 插入节点 appendChild()

    insertBefore(newNode,node);

  3. 删除节点 removeChild(childNode)

  4. 换节点 replaceChild(newNode,node)

  5. 创建文本节点 createTextNode()

style代码:

  1. <style type="text/css">
  2. .active{color:red;font-size:30px;}
  3. </style>

html代码:

  1. <div id="box">
  2. <p id="active">liujing</p>
  3. </div>

JavaScript代码:

  1. var oDiv = document.getElementById('box');
  2. var oActive = document.getElementById('active');//<p id="active">liujing</p>
  3. var newNode = document.createElement('p');//1097576.COM
  4. var newNode2 = document.createElement('p');//1111.COM
  5. var newNode3 = document.createElement('a');//
  6. console.log(newNode === newNode2);
  7. newNode.setAttribute('class','active');
  8. newNode3.setAttribute('href','http://www.pnp.cn');
  9. oDiv.appendChild(newNode);
  10. //第一个参数是新插入的节点,第二个参数是参考的节点
  11. oDiv.insertBefore(newNode2,oActive);//1111.COM 放在liujing
  12. // var textNode = document.createTextNode('alex');
  13. // newNode.appendChild(textNode);
  14. newNode.innerHTML = '<a href="#">1097576.COM</a>';
  15. // newNode.innerText = '<a href="#">1097576.COM</a>';
  16. // newNode = null;//释放对象 在内存
  17. newNode2.innerHTML = '<a href="#">1111.COM</a>';//
  18. newNode3.innerHTML = '<a href="#">PHP中文网</a>';//
  19. // oDiv.removeChild(oActive);
  20. oDiv.replaceChild(newNode3,newNode);//PHP中文网 把 1097576.COM 替换掉

样式设置(动态操作样式):

style代码:

  1. <style type="text/css">
  2. .hightLight{
  3. background-color:black;
  4. color:white;
  5. height:300px;
  6. width:240px;
  7. font-size:23px;
  8. text-align:center;
  9. line-height:300px;
  10. }
  11. </style>

html代码:

  1. <p id="box" style="color:red;">liujing</p>

JavaScript代码:

  1. //nodeObject.style
  2. var oP = document.getElementById('box');
  3. 第一种方法:
  4. console.log(oP.style);
  5. oP.style.color = 'white';
  6. oP.style.backgroundColor = 'black';
  7. oP.style.width = '250px';
  8. oP.style.height = '250x';
  9. oP.style.textAlign = 'center';
  10. oP.style.lineHeight = '250px';
  11. oP.style.fontSize = '30px';
  12. 第二种方法:
  13. oP.setAttribute('class','hightLight');

事件介绍和onclick事件:

常用的事件

onclick 鼠标单击事件
onmouseover 鼠标经过事件
onmouseout 鼠标移开事件
onchange 文本框内容改变事件
onselect 文本框内容被选中事件
onfocus 光标聚焦事件
onblur 光标失焦事件
onload 网页加载事件

style代码:

  1. <style type="text/css">
  2. #box{
  3. width:100px;
  4. height:100px;
  5. background-color:blue;
  6. }
  7. </style>

html代码:

  1. <div id="box" ></div>

JavaScript代码:

事件介绍和onclick事件

  1. var oDiv = document.getElementById('box');
  2. var isBlue = true;
  3. oDiv.onclick = function(){
  4. // alert('事件被触发');
  5. //this指向当前的元素节点对象
  6. // console.log(this);//<div id="box"></div>
  7. if(isBlue){
  8. this.style.backgroundColor = 'red';
  9. isBlue = false;
  10. }else{
  11. this.style.backgroundColor = 'blue';
  12. isBlue = true;
  13. }
  14. }
  15. // var dd = function(){
  16. // alert('事件被触发');
  17. // }
  18. // oDiv.onclick = dd;

鼠标悬浮事件:

  1. //1.找到触发的事件对象 2.事件 3.事件处理程序
  2. var oDiv = document.getElementById('box');
  3. // 2.鼠标滑过事件
  4. oDiv.onmouseover = function(){
  5. //3.事件处理程序
  6. this.style.backgroundColor = 'green';
  7. }
  8. oDiv.onmouseout = function(){
  9. //3.事件处理程序
  10. this.style.backgroundColor = 'blue';
  11. }

光标聚焦和失焦事件:

  1. style代码:
  2. <style type="text/css">
  3. .text{
  4. color:red;
  5. font-size:24px;
  6. }
  7. </style>
  8. html代码:
  9. <form action="">
  10. <p class="name">
  11. <label for="username">用户名</label>
  12. <input type="text" name="user" id="username">
  13. </p>
  14. <p class="pwd">
  15. <label for="password">密码</label>
  16. <input type="password" name="password" id="password">
  17. </p>
  18. <input type="submit" name="">
  19. </form>
  20. javascript代码:
  21. var username = document.getElementById('username');
  22. var newNode = document.createElement('span');
  23. username.onfocus = function(){
  24. // console.log('请输入用户名');
  25. newNode.innerHTML='请输入用户名';
  26. newNode.setAttribute('class','text');
  27. username.parentNode.appendChild(newNode);
  28. }
  29. username.onblur = function(){
  30. // console.log('请输入正确用户名');
  31. newNode.innerHTML='请输入正确用户名';
  32. newNode.setAttribute('class','text');
  33. username.parentNode.appendChild(newNode);
  34. }

表单控件上内容选中和改变事件:

  1. html代码:
  2. <textarea cols="30" rows="10">111111111</textarea>
  3. <input type="text" name="" value="liujing">
  4. javascript代码:
  5. // onselect onchange
  6. var textArea = document.getElementsByTagName('textarea')[0];
  7. var inputObject = document.getElementsByTagName('input')[0];
  8. textArea.onselect = function(){
  9. console.log('内容被选中了');
  10. }
  11. inputObject.onchange = function(){
  12. console.log('内容被改变了');
  13. }
  14. inputObject.oninput = function(){//实时监测输入框内容的改变
  15. console.log('内容被实时的改变');
  16. console.log(this.value);
  17. }

窗口加载事件:

  1. script代码:
  2. <script type="text/javascript">
  3. // setTimeout(function(){
  4. // var oDiv = document.getElementById('box');
  5. // console.log(oDiv);
  6. // oDiv.onclick = function(){
  7. // this.innerHTML = 'jingjing222';
  8. // }
  9. // },0)
  10. //等待文档元素加载完成才会调用onload() 覆盖现象 有多个onload的时候
  11. window.onload = function(){
  12. var oDiv = document.getElementById('box');
  13. console.log(oDiv);
  14. oDiv.onclick = function(){
  15. this.innerHTML = 'jingjing';
  16. }
  17. }
  18. </script>
  19. html代码:
  20. <div id="box">liujing</div>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议