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" οnclick="addInput1();"/>
 3     <input type="button" value="增加行2" οnclick="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 οnclick='函数()'></div>
onfocus
onblur

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

this(谁调用指向谁) ---> 当前触发事件的标签
  a. 第一种绑定方式(绑定在标签中)
  <input id="i1" type="button" οnclick="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>

 

转载于:https://www.cnblogs.com/Druidchen/p/9105910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值