JavaScript学习笔记之DOM介绍
1、简介
文档对象模型(Document Object Model,DOM)使 JavaScript 可以访问和操作 HTML 文档
当网页被加载时,浏览器会创建页面的文档对象模型,根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都被视为节点,而 HTML 文档则被视为节点树
2、方法
DOM 方法定义在节点上执行的动作,以下列出常用的 DOM 方法:
- getElementById():返回带有指定 ID 的节点
- getElementsByTagName():返回带有指定标签名称的节点列表
- getElementsByClassName():返回带有指定类名的节点列表
- appendChild():添加子节点
- removeChild():删除子节点
- replaceChild():替换子节点
- createElement():创建元素节点
- createTextNode():创建文本节点
- createAttribute():创建属性节点
- getAttribute():返回指定的属性值
- setAttribute():设置属性为指定的值
3、属性
DOM 属性是节点的值,以下列出常用的 DOM 属性:
innerHTML:获取元素内容
nodeName:规定节点名称,只读
| nodeName | 值 |
|---|---|
| 元素节点 | 与标签名相同 |
| 属性节点 | 与属性名相同 |
| 文本节点 | #text |
| 文档节点 | #document |
- nodeValue:规定节点的值
| nodeValue | 值 |
|---|---|
| 元素节点 | undefined 或 null |
| 属性节点 | 属性值 |
| 文本节点 | 文本本身 |
- nodeType:规定节点类型,只读
| nodeType | 值 |
|---|---|
| 元素节点 | 1 |
| 属性节点 | 2 |
| 文本节点 | 3 |
| 注释节点 | 8 |
| 文档节点 | 9 |
4、访问节点
(1)getElementById()
使用 getElementById() 方法可以返回带有指定 ID 的节点
<!DOCTYPE html>
<html>
<body>
<p>Hello World!</p>
<p id="dom">Hello DOM!</p>
<script>
x = document.getElementById("dom");
document.write("id 为 dom 的文本: " + x.innerHTML);
</script>
</body>
</html>
<!-- 页面内容:
Hello World!
Hello DOM!
id 为 dom 的文本: Hello DOM!
-->
(2)getElementsByTagName()
使用 getElementsByTagName() 方法可以返回带有指定标签名称的节点列表
<!DOCTYPE html>
<html>
<body>
<p>Hello World!</p>
<p>Hello DOM!</p>
<script>
x = document.getElementsByTagName("p");
document.write("第一段文本: " + x[0].innerHTML);
</script>
</body>
</html>
<!-- 页面内容:
Hello World!
Hello DOM!
第一段文本: Hello World!
-->
(3)getElementsByClassName()
使用 getElementsByClassName() 方法可以返回带有指定类名的节点列表
5、修改节点
(1)修改节点内容
修改节点内容最简单的方法是使用 innerHTML 属性
可以通过以下语法修改 HTML 元素的内容
document.getElementById("...").innerHTML = value;
(2)修改节点属性
可以通过以下语法修改 HTML 元素的属性
document.getElementById("...").attribute = value;
6、添加节点
如果需要添加新的节点,可以按照下面三个步骤进行:
- 创建新的节点
- 找到已存在的节点
- 将新的节点追加到已存在的节点 —— appendChild
// 创建新的元素节点 para
var para = document.createElement("p");
// 创建新的文本节点 text
var text = document.createTextNode("This is a new paragraph.");
// 将文本节点 text 添加到元素节点 para
para.appendChild(text);
// 找到已存在的元素节点 element
var element = document.getElementById("...");
// 将新的元素节点 para 追加到已存在的元素节点 element
element.appendChild(para);
7、删除节点
如果需要删除已经存在的节点,可以按照下面三个步骤进行:
- 找到待删除节点的父节点
- 找到待删除节点
- 从父节点中删除子节点 —— removeChild
// 找到待删除节点的父节点 parent
var parent = document.getElementById("div1");
// 找到待删除节点 child
var child = document.getElementById("p1");
// 从父节点 parent 中删除子节点 child
parent.removeChild(child);
也可以先找到待删除节点,然后通过 parentNode 属性查找待删除节点的父节点
// 找到待删除节点 child
var child = document.getElementById("p1");
// 通过 parentNode 属性查找待删除节点的父节点,然后从父节点中删除子节点 child
child.parentNode.removeChild(child);
8、替换节点
替换节点与添加和删除节点类似,需要四个步骤:
- 创建新的节点
- 找到待替换节点的父节点
- 找到待替换节点
- 从父节点中替换子节点成新的节点 —— replaceChild
// 创建新的元素节点 para
var para = document.createElement("p");
// 创建新的文本节点 text
var text = document.createTextNode("This is a new paragraph.");
// 将文本节点 text 添加到元素节点 para
para.appendChild(text);
// 找到待替换节点的父节点 parent
var parent = document.getElementById("div1");
// 找到待替换节点 child
var child = document.getElementById("p1");
// 从父节点 parent 中替换子节点 child 成新的节点 para
parent.replaceChild(para,child);
同样的,可以通过 parentNode 属性查找待替换节点的父节点
9、改变 CSS
HTML DOM 允许通过 JavaScript 改变 HTML 元素的样式
可以通过以下语法修改 HTML 元素的样式
document.getElementById("...").style.property = value;
Background 属性
background:在一行中设置所有的背景属性
backgroundColor:设置元素的背景颜色
- backgroundImage:设置元素的背景图像
- backgroundPosition:设置背景图像的起始位置
- backgroundRepeat:设置背景图像是否重复
backgroundAttachment:设置背景图像是否固定
Border 属性
- border:在一行中设置四个边框的所有属性
- borderTop:在一行中设置顶边框的所有属性
- borderRight:在一行中设置右边框的所有属性
- borderBottom:在一行中设置底边框的所有属性
- borderLeft:在一行中设置左边框的所有属性
- borderColor:设置所有四个边框的颜色
- borderStyle:设置所有四个边框的样式
- borderWidth:设置所有四个边框的宽度
Margin 属性
- margin:在一行中设置元素的边距
- marginTop:设置元素的上边距
- marginRight:设置元素的右边距
- marginBottom:设置元素的下边距
- marginLeft:设置元素的左边距
Padding 属性
- padding:在一行中设置元素的填充
- paddingTop:设置元素的上填充
- paddingRight:设置元素的右填充
- paddingBottom:设置元素的下填充
- paddingLeft:设置元素的左填充
Outline 属性
- outline:在一行中设置元素轮廓的所有属性
- outlineColor:设置围绕元素的轮廓颜色
- outlineStyle:设置围绕元素的轮廓样式
- outlineWidth:设置围绕元素的轮廓宽度
List 属性
- listStyle:在一行中设置列表的所有属性
- listStyleType:设置列表项标记的类型
- listStyleImage:设置列表项标记为图像
- listStylePosition:设置列表项标记的位置
Table 属性
- borderCollapse:设置表格边框是否合并为单边框
- borderSpacing:设置分隔单元格边框的距离
- captionSide:设置表格标题的位置
- emptyCells:显示空单元格的显示
- tableLayout:设置显示表格单元格、行以及列的算法
Text 属性
- color:文本颜色
- font:在一行中设置字体的所有属性
- fontFamily:字体系列
- fontSize:字体大小
- fontWeight:字体粗细
- fontStyle:字体样式
- fontStretch:紧缩或伸展字体
- fontVariant:小型大写字母
- letterSpacing:字间距
- wordSpacing:词间距
- lineHeight:行间距
- textAlign:文本对齐
- textIndent:文本缩进
- textDecoration:文本修饰
- textShadow:文本阴影
- textTransform:文本大写
- whiteSpace:空白显示
参考资料:
http://www.w3school.com.cn/js/index.asp
http://www.w3school.com.cn/htmldom/index.asp
http://www.w3school.com.cn/jsref/dom_obj_style.asp
JavaScript学习笔记之DOM介绍的更多相关文章
- javascript学习笔记之DOM与表单
DOM(文档对象模型),猫叔了一个层次化的节点树 一.DOM NODE相关公共属性与方法 DOM中所有节点都实现了NODE接口,该接口的公共属性和方法如下: 1.节点基本属性 1)NodeType 节 ...
- JavaScript 学习笔记-HTML&&DOM
HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. JavaScript 能够 ...
- javascript学习笔记之DOM
DOM(文档对象模型),描述了一个层次化的节点树 一.DOM NODE相关公共属性与方法 DOM中所有节点都实现了NODE接口,该接口的公共属性和方法如下: 1.节点基本属性 1)NodeType 节 ...
- JavaScript学习笔记之DOM对象
目录 1.Document 2.Element 3.Attribute 4.Event 1.Document 每个载入浏览器的 HTML 文档都会成为 Document 对象,Document 对象允 ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- Javascript学习笔记二——操作DOM
Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...
- HTML+CSS学习笔记(1) - Html介绍
HTML+CSS学习笔记(1) - Html介绍 1.代码初体验,制作我的第一个网页 <!DOCTYPE HTML> <html> <head> <meta ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- Redis 持久化,写入磁盘的方式
如果帮到了您,可以支持一下,谢谢您的支持! Redis是一个支持持久化的内存数据库=>也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化. redis支持四种持久化方式, 一是 Sn ...
- POJ 1300 Door Man(欧拉通路)
题目描写叙述: 你是一座大庄园的管家. 庄园有非常多房间,编号为 0.1.2.3..... 你的主人是一个心不在 焉的人,常常沿着走廊任意地把房间的门打开.多年来,你掌握了一个诀窍:沿着一个通道,穿 ...
- java学习笔记:Eclipse打开现有项目
初学JAVA,觉得困难重重. 多年来,已经习惯了微软系列的VS,现在使用Eclipse,觉得差别很大. 比如打开一个现有项目.并没有什么所谓的项目文件,如*.sln,*.cproj什么的.那怎么打开? ...
- [译]使用AssetBundle Manader
AssetBundle and the AssetBundle Manager 介绍 AssetBundle允许从本地或者远程服务器加载Assets资源,利用AssetBundles技术,Assets ...
- bzoj1143: [CTSC2008]祭祀river && bzoj27182718: [Violet 4]毕业旅行
其实我至今不懂为啥强联通缩点判入度会错... 然后这个求的和之前那道组合数学一样,就是最长反链=最小链覆盖=最大独立集. #include<cstdio> #include<iost ...
- How do browser cookie domains work?
https://stackoverflow.com/questions/1062963/how-do-browser-cookie-domains-work 答案一 Although there is ...
- bzoj 2465 小球
题目大意: 给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量 必须把球放到瓶子里面 计算最多能放多少个球到这些瓶子里 思路: 开始想的是费用流 超级源向每个球连一条 容 ...
- 通过usb连接adb
手机不同进入的方式可能不一样,我使用的是努比亚手机. 借鉴这里的:http://adbshell.com/commands/adb-connect 在Wi-Fi上使用ADB:adb connect & ...
- PCB C# MongoDB 查询(SQL,NOSQL,C#对比)
一.准备阶段 1.查询数据清单准备 2.这里先将SQL语句执行顺序列出来,方便后面语句对比更好理解 ()SELECT ()DISTINCT ()<Top Num> <select l ...
- Another lottery
http://acm.hdu.edu.cn/showproblem.php?pid=2985 题意:有n个人每个人可以买m轮彩票,每轮可以买尽可能多的彩票.如果该彩票在i轮被抽到,则该人可以获得2^i ...