52-DOM

1、DOM简介

文档对象模型(Document Object Model,简称DOM)。HTML DOM 定义了访问和操作 HTML 文档的标准方法,DOM 将 HTML 文档表达为树结构。HTML DOM树状结构如下:

 

 

 

2、DOM节点父、子和同胞 

节点树中的节点彼此拥有层级关系。

父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)
  • 每个节点都有父节点、除了根(它没有父节点)
  • 一个节点可拥有任意数量的子
  • 同胞是拥有相同父节点的节点

下面的图片展示了节点树的一部分,以及节点之间的关系:

DOM 节点关系

 

3、DOM方法

方法描述
getElementById() 返回带有指定 ID 的元素。
getElementsByName() 返回包含带有指定属性名称的所有元素节点(返回数组)
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(返回数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表(返回数组)。
appendChild() 把新的子节点添加到指定节点。
removeChild() 删除子节点。
replaceChild() 替换子节点。
insertBefore() 在指定的子节点前面插入新的子节点。
createAttribute() 创建属性节点。
createElement() 创建元素节点。
createTextNode() 创建文本节点。
getAttribute() 返回指定的属性值。
setAttribute() 把指定属性设置或修改为指定的值。

 

 

4、DOM操作

4.1 DOM直接查找

 1 <div id="i1">ID=i1</div>
 2 <div class="c1">CLASS=c1</div>
 3 <div name="name1">NAME=name1</div>
 4 <a>aaa</a>
 5 <a>bbb</a>
 6 <a>ccc</a>
 7 <script>
 8 
 9     var tag = document.getElementById("i1");
10     console.log(tag);  // 获取的是标签及标签内容
11     document.write("<br />", tag.innerText, "<br />");  // 获取标签的内容
12 
13     var tag1 = document.getElementsByClassName("c1");  //通过类名查找HTML DOM,返回的是数组
14     console.log(tag1[0]);  // 获取的是标签及标签内容
15     document.write(tag1[0].innerText, "<br />");  // 获取标签的内容
16 
17     var tag2 = document.getElementsByName("name1");  //通过属性查找HTML DOM,返回的是数组
18     console.log(tag2[0]);  // 获取的是标签及标签内容
19     document.write(tag2[0].innerText, "<br />");  // 获取标签的内容
20 
21 
22     var tag3 = document.getElementsByTagName("a");  //通过标签名字查找HTML DOM,返回的是数组
23     for (var i=0; i<tag3.length; i++){
24         console.log(tag3[i]);  // 获取的是标签及标签内容
25         document.write(tag3[i].innerText, "<br />");  // 获取标签的内容
26         tag3[i].innerText = 666;  // 给标签内容赋新值(只是修改内存中的值,并不会真正修改标签内容自身的值)
27 
28     }
29 
30 </script>

 

4.2 DOM间接查找

 1 <body>
 2     <div>
 3         <div>兄弟1</div>
 4         <div id="i1">
 5             兄弟2
 6         </div>
 7     </div>
 8     <div>
 9         <div>兄弟1</div>
10         <div id="i2">
11             兄弟2
12         </div>
13     </div>
14     <div>
15         <div>兄弟1</div>
16         <div id="i3">
17             兄弟2
18         </div>
19     </div>
20     <script>
21         tag = document.getElementById("i1");
22         par_tag = tag.parentElement;  // 获取父标签
23         tag.children; // 获取所有子标签
24         tag.firstElementChild; //第一个子标签元素
25         tag.lastElementChild;  //最后一个子标签元素
26         tag.nextElementSibling;  //下一个兄弟标签元素
27         tag.previousElementSibling; //上一个兄弟标签元素
28         console.log(par_tag);
29     </script>
30 </body>

 

 4.3 文件内容操作  

checkbox: checked
className: 获取或更改class的值
classList: 获取class的值并返回列表

    • classList.add 增加一个class
    • classList.remove 移除一个class

 

 1 <style>
 2     .c1{
 3         font-size: 20px;
 4         color: red;
 5         background-color: white;
 6         ...
 7     }
 8 </style>
 9 
10 obj = document.getElementXXX
11 obj.style.fontSize = "16px"  <!-- 由css中的font-size在JS中的写法变为fontSize。此方式可以最小化修改颗粒度。 -->

 

4.4 属性操作

  • setAttribute(key,value) 增加属性
  • removeAttribute 移除属性
  • attributes 获取所有属性

4.5 其它 

console.log 打印日志
alert 弹窗
confirm 确认框,有返回值true or false

location.href 获取当前url
location.href = "newurl" 重定向 跳转
location.reload 刷新页面 <====> location.href = location.href

setInterval(function(){}, 毫秒) 定时器,一直会执行

var obj = setInterval(function(){}, 毫秒)
clearInterval(obj) 清除计时器

setTimeout 定时器,只执行一次
setTimeout(function(){
console.log("timeout");
}, 5000) 5秒后打印timeout

var obj = setTimeout(function(){}, 毫秒)
clearTimeout(obj) 清除定时器

 

5、创建标签 

创建标签的方式有两种:

a. 字符串方式

  "<标签>...</标签>"
b. 对象的方式
  document.createElement("div")

 1 <body>
 2     <input type="button" value="增加行1" onclick="addInput1();"/>
 3     <input type="button" value="增加行2" onclick="addInput2();"/>
 4 
 5     <div id="i1" style="background: #006699; height: 200px; width: 600px;">
 6         <p><input type="text" /></p>
 7         <p><input type="text" /></p>
 8     </div>
 9 
10     <script>
11         function addInput1() {
12             var tag = "<p><input type='text' value='方法一通过标签字符串新增行' /></p>";  //创建一个字符串标签
13             document.getElementById("i1").insertAdjacentHTML("afterBegin", tag);  //将标签增加到id=i1的div中
14         } /* insertAdjacentHTML第一个参数只有四个选项(beforeEnd,beforeBegin,afterEnd,afterBegin)
15              beforeBegin(开始之前):在获取到的标签的紧邻的上方兄弟标签位置插入新标签
16              beforeEnd(结束之前):在获取到的标签的最后一个孩子标签位置插入新标签
17              afterBegin(开始之后):在获取到的标签的第一个孩子标签位置插入新标签
18              afterEnd(结束之后):在获取到的标签的紧邻的下方兄弟标签位置插入新标签
19           */
20         function addInput2(){
21             var tag = document.createElement("input");  //创建一个对象
22             tag.setAttribute("type", "text");  //设置标签属性
23 
24             tag.style.fontSize = "18px";
25             tag.style.color = "red";
26             tag.value = "方法二通过对象方式新增行";
27 
28             var  p = document.createElement("p");
29             p.appendChild(tag);  //让p标签包裹input标签
30 
31             document.getElementById("i1").appendChild(p);  //将标签增加到id=i1的div中
32         }
33     </script>
34 </body>

 

6、事件

<div onclick='函数()'></div>
onfocus
onblur

绑定事件的两种方式:
  a. 直接在标签中绑定
  b. 先获取DOM对象,然后进行绑定

this(谁调用指向谁) ---> 当前触发事件的标签
  a. 第一种绑定方式(绑定在标签中)
  <input id="i1" type="button" onclick="clickOn(this)" />
  function clickOn(ths){
    this // 这里的this是当前点击的标签
  }
b. 第二种绑定方式
  <input id="i1" type="button" />
  document.getElementById("i1").onclick = function(){
    this // 这里的this是当前点击的标签
  }
c. 第三种绑定方式:addEventListener

 1 <head>
 2     <meta charset="UTF-8">
 3     <title>Title</title>
 4     <style>
 5         #main{
 6             background-color: #204982;
 7             width: 300px;
 8             height: 300px;
 9         }
10         #content{
11             background-color: steelblue;
12             width: 150px;
13             height: 150px;
14         }
15     </style>
16 </head>
17 <body>
18     <div id="main">
19         <div id="content"></div>
20     </div>
21 
22     <script>
23         var main = document.getElementById("main");
24         var content = document.getElementById("content");
25 
26         main.addEventListener("click", function(){console.log("main")}, false);
27         content.addEventListener("click", function(){console.log("content")}, false);
28         // 当第三个值为false或不写时为冒泡,先打印content后打印main;当第三个值为true时为捕捉,先打印main后打印content
29     </script>
30 </body>

 

posted @ 2018-05-29 16:50  Druid_Py  阅读(166)  评论(0编辑  收藏  举报