Blogger Information
Blog 22
fans 0
comment 1
visits 17605
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
第三章 DOM操作
刘静的博客
Original
818 people have browsed it

第三章 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>
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!