专栏首页闻道于事JavaScript对象之document对象

JavaScript对象之document对象

DOM对象之document对象

DOM对象:当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

HTML DOM 模型被构造为对象的树。

打开网页后,首先看到的是浏览器窗口,即顶层的window对象。

其次,看到的是网页文档的内容,即document文档。

首先看一下w3c提供的document对象的定义和其他相关知识:

现在我们来详细的看一下document对象:

第一类:找元素

四种基本的找元素的方法

  document.getElementById("d1"); 

  根据id找元素,因为id是唯一的,只能找的一个元素

  getElementsByClassName("c1");

  根据class找元素,因为class不唯一,可以找到多个元素,返回数组

  document.getElementsByTagName("div");

  根据标签名找元素,因为标签名不唯一,可以找到多个元素,返回数组

  document.getElementsByName("uname");

  根据name找元素,主要用于表单元素,因为有单选等情况name不唯一,可以找到多个元素,返回数组

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1">
 9         <div></div>
10         <span></span>
11     </div>
12     <div class="c1"></div>
13     <span class="c1"></span>
14     <input type="button" name="uname" />
15 </body>
16 </html>
17 <script>
18     var a = document.getElementById("d1");    //根据id找元素
19     var b = document.getElementsByClassName("c1");    //根据class找元素
20     var c = document.getElementsByTagName("div");    //根据标签名找元素
21     var d = document.getElementsByName("uname");    //根据name找元素
22     alert(a+"\n"+b[1]+"\n"+c[0]+"\n"+d[0]);
23 </script>

id=d1的返回值a,找到div元素

class=c1的返回值数组b,b[1],数组b中的第二个元素,找到span元素

标签=div的返回值数组c,c[0],数组c第一个元素,找到div元素

name=uname的返回值数组d,d[0],数组d的第一个元素,找到input元素

如上我们可以看出除了根据id找元素,其他方法找元素都可以找到多个,返回数组

复杂的找元素

a.childNodes[0]方法找该元素的子元素

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1">
 9         <div></div>
10         <span></span>
11     </div>
12     <div class="c1"></div>
13     <span class="c1"></span>
14     <input type="button" name="uname" />
15 </body>
16 </html>
17 <script>
18     var a = document.getElementById("d1");    //根据id找元素
19     alert(a.childNodes[0]+"\n"+a.childNodes[1]+"\n"+a.childNodes[2]+"\n"+a.childNodes[3]+"\n"+a.childNodes[4]+"\n"+a.childNodes[5]+"\n");
20 </script>

如上我们可以看出,找子元素会找到多个,返回的一定是数组,id为d1的元素内有5个子元素三个文本,一个div元素,一个span元素

注意:这个方法不仅找出了标签内的标签,还会找出文本,这里回车换行也被识别成文本写入了数组

a.parentNode 找父级元素

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1">
 9         <div></div>
10         <span></span>
11     </div>
12     <div class="c1"></div>
13     <span class="c1"></span>
14     <input type="button" name="uname" />
15 </body>
16 </html>
17 <script>
18     var a = document.getElementById("d1");    //根据id找元素
19     alert(a.parentNode);
20 </script>

父级元素只能有一个,如上是id=d1的元素的父级元素body元素

找同级元素

a.previousSibling 找上一个同级元素

a.nextSibling 找下一个同级元素

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body><div id="d1">
 8         <div></div>
 9         <span></span>
10     </div><div class="c1"></div>
11     <span class="c1"></span>
12     <input type="button" name="uname" />
13 </body>
14 </html>
15 <script>
16     var a = document.getElementById("d1");    //根据id找元素
17     alert(a.previousSibling+"\n"+a.nextSibling);
18 </script>

在如上代码中,我们先让id=d1的元素紧贴跟前后不留回车等文本内容,得出上一个同级元素没有,下一个同级元素为div

第二类:控制元素

remove删除元素

createElement创建元素

appendChild追加元素

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1">
 9         <div></div>
10         <span></span>
11     </div>
12     <div id="d2">
13     </div>
14 </body>
15 </html>
16 <script>
17     var a = document.getElementById("d1");    //根据id找元素
18     var b = document.getElementById("d2");
19     a.remove();    //移除元素 
20     var s = document.createElement("p");    //创建元素
21     b.appendChild(s);     //追加元素
22 </script>

通过审查元素,我们可以看到id=d1的元素已被移除,id=d2的元素被追加了子元素<p>

第三类:操作内容

普通元素的操作

innerText获取内容文本

innerHTML获取内容代码

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1">
 9         <span>这是div中的span中的内容</span>
10     </div>
11     <div id="d2">
12         <span>这是div2中的span中的内容</span>
13     </div>
14     <div id="d3">
15         <span>这是div3中的span中的内容</span>
16     </div>
17 </body>
18 </html>
19 <script>
20     var a = document.getElementById("d1");    //根据id找元素
21     var b = document.getElementById("d2");
22     var c = document.getElementById("d3");
23     alert(a.innerText+"\n"+a.innerHTML);
24     b.innerText="hello";    //给元素赋值,针对文本,其他内容会被替换
25     c.innerHTML="<b>加粗</b>"
26 </script>

以上我们可以看出innerText只会获取内容文本,而innerHTML会将内容代码一起获取

这两个方法不仅可获取内容,还可以赋值写入内容,赋值写入的内容会替换原来的内容,并且通过innerHTML赋值写入的内容会和正常代码一样在网页中生效

表单元素的操作

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <input type="text" name="uname" id="d5"/>
 9 </body>
10 </html>
11 <script>
12     var a = document.getElementById("d5");    
13     a.value="hello";    //给元素赋值
14     alert(a.value);        //元素的取值
15 </script>

如上我们可以通过调用value来给表单元素赋值和取值。

第四类:操作属性

setAttribute(属性名,属性值)设置属性

removeAttribute(属性名)移除属性

getAttribute(属性名)获取属性

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1">
 9         <span>这是div中的span中的内容</span>
10     </div>
11     <div id="d2">
12         <span>这是div2中的span中的内容</span>
13     </div>
14 </body>
15 </html>
16 <script>
17     var a = document.getElementById("d1");
18     var b = document.getElementById("d2");
19     a.setAttribute("bs",100);    //添加属性bs=100
20     b.setAttribute("bs",100);    //添加属性bs=100
21     alert(a.getAttribute("bs"));    //获取属性bs的值
22     b.removeAttribute("bs");    //删除b的属性bs
23 </script>

如上我们可以看出我们添加的bs属性,和第二个div中被移除的bs属性,以及获取的bs属性。

第五类:操作样式

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>无标题文档</title>
 6 </head>
 7 <body>
 8     <div id="d1" style="height:100px;broder:1px">
 9         这是div1中的内容
10     </div>
11       <div id="d2" style="height:100px">
12         这是div2中的内容
13     </div>
14 </body>
15 </html>
16 <script>
17     var a = document.getElementById("d1");
18     var b = document.getElementById("d2");
19     a.style.backgroundColor="red";    //设置样式,加的是内联的
20     b.style.backgroundColor="red";    //设置样式,加的是内联的
21     alert(a.style.height);    //获取样式
22     b.style.backgroundColor="";    //移除样式
23 </script>

如上我们可以添加样式,也可以获取样式的值,还可以用样式的值为空的方式来移除样式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从源码看Spring Boot 2.0.1

    Spring Boot 命名配置很少,却可以做到和其他配置复杂的框架相同的功能工作,从源码来看是怎么做到的。

    二十三年蝉
  • JavaScript事件与例子(三)

    两个例子,好友选中效果和左侧右侧子菜单 一、好友选中效果 可以通过设置属性的方式判断当前是否被选中,也可以通过获取当前元素的颜色从而得知当前元素状态是否被选中,...

    二十三年蝉
  • JavaWeb(八)JQuery

    jQuery 市场用得比较多两个框架: jQuery 比较适合做一些互联网 的应用(12306.com,蘑菇街,美丽说,聚美) extjs 比较适合做后台管理系...

    二十三年蝉
  • 用rust写了个小程序

    代码本身非常简单,就是提取 /proc/[pid]/ 目录下的信息,整理后输出出来。

    wangyuntao
  • 软件工程 类图习题

    (A)Public      (B)Protected      (C)Private    (D)Package

    Debug客栈
  • 利用AngularJS中ng-include实现静态HTML头文件和尾文件导入

    今天给大家介绍一下如何利用AngularJS中ng-include实现静态HTML头文件和尾文件导入。 其实特别简单,第一步先引入AngularJS的js文件、...

    林老师带你学编程
  • 这场NeurIPS 2019研讨会,让新人与Bengio等大佬面对面交流,还颁发了三项论文奖

    NeurIPS 2019 已经在温哥华接近尾声。作为人工智能和机器学习领域最顶级的盛会之一,本届大会参会总人数已经超过 13000 人,比去年增加了 50%。

    机器之心
  • 聊聊rocketmq的maxReconsumeTimes

    rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/consumer/DefaultMQ...

    codecraft
  • win10 uwp 使用 Microsoft.Graph 发送邮件 注册应用创建 UWP 程序安装 nuget 包添加访问权限发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是...

    林德熙
  • 为什么Java里面String类是不可变的

    在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题。

    我是攻城师

扫码关注云+社区

领取腾讯云代金券