DOM document(html) object modle 。通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
document对象(DOM核心对象)
document 表示的是一个文档对象。
dom能用来干什么?
对html元素的样式(颜色、大小、位置等等)、内容、属性
来进行动态的改变和操作。
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
-
JavaScript 能够改变页面中的所有 HTML 元素
-
JavaScript 能够改变页面中的所有 HTML 属性
-
JavaScript 能够改变页面中的所有 CSS 样式
-
JavaScript 能够对页面中的所有事件做出反应
1.1.1 DOM元素对象
DOM 元素(节点)
1.1.1 .1 创建节点
createElement() 方法通过指定名称创建一个元素
document.createElement(nodename)
参数
var h1=document.createElement('h1')
var p=document.createElement('p')
document.body.appendChild(h1)
document.body.appendChild(p)
预览:
创建文本节点
语法
document.createTextNode(text)
参数
//创建dom节点
var h1=document.createElement('h1')
var p=document.createElement('p')
//创建文本节点
var ht1=document.createTextNode('小明同学')
var pt1=document.createTextNode('下午好')
//向body中添加dom节点
document.body.appendChild(h1)
h1.appendChild(ht1);
document.body.appendChild(p)
p.appendChild(pt1)
预览:
1.1.1 .2 添加节点
appendChild() 方法可向节点的子节点列表的末尾添加新的子节点。
语法
node.appendChild(node)
参数
编写一个函数,实现功能:单击按钮创建button元素
//单击按钮创建button元素
var btn=document.querySelector('#btn')
console.log(btn);
btn.onclick=function(){
//创建dom节点
var mybtn=document.createElement('button')
var btntext=document.createTextNode('我是按钮')
document.body.appendChild(mybtn)
mybtn.appendChild(btntext)
}
预览:
通过遍历的形式,去 创建节点,添加节点
var ul=document.createElement('ul')
//向无序列表中添加10个列表项
for(var i=1;i<=10;i++){
//在遍历的过程中,每次让其生成1个li并且把li追加到ul中
var li=document.createElement('li')
var litext=document.createTextNode(`我是第${i}列表项`)
li.appendChild(litext)
ul.appendChild(li)
}
document.body.appendChild(ul)
预览:
向已有的子节点前插入新子节点
insertBefore() 方法可在已有的子节点前插入一个新的子节点。
语法
node.insertBefore(newnode,existingnode)
参数
向已有的子节点前插入新子节点
//向已有的子节点前插入新的子节点
//1抓取元素
var box =document.querySelector('#box')
var h1=document.querySelector("#h1")
console.log(box,h1);
//创建dom节点
var para=document.createElement('p')
var ptext=document.createTextNode('我是段落标签')
para.appendChild(ptext)
//添加节点
box.insertBefore(para,h1)
预览:
1.1.1.3 删除已有节点
removeChild() 方法可从子节点列表中删除某个节点。
如删除成功,此方法可返回被删除的节点,如失败,则返回 NULL。
语法
node.removeChild(node)
参数
删除已有节点(已有html元素)
<div id="box">
<h1 id="h1">我是标题1</h1>
<h2>我是标题2</h2>
</div>
<button id="btn">删除</button>
var btn=document.querySelector('#btn')
btn.onclick=function(){
//抓取元素
var box=document.querySelector('#box')
var h1=document.querySelector('#h1')
//删除
box.removeChild(h1)
}
预览:
1.1.1.4 替换节点
replaceChild() 方法可将某个子节点替换为另一个。替换 节点HTML 元素
语法
node.replaceChild(newnode,oldnode)
参数
把盒子中的h1标签,替换成我们动态创建的p段落标签
<div id="box">
<h1 id="h1">我是标题1</h1>
<h2>我是标题2</h2>
</div>
<button id="btn">替换</button>
<script>
var btn=document.querySelector('#btn')
btn.onclick=function(){
//抓取元素
var box=document.querySelector('#box')
var h1=document.querySelector('#h1')
// 创建节点
var para = document.createElement('p')
var t = document.createTextNode('我是段落标签')
para.appendChild(t)
//替换节点
box.replaceChild(para,h1)
}
</script>
预览:
1.1.1.5 子节点集合
childNodes 属性返回包含被选节点的子节点的 NodeList。
语法
element.childNodes
技术细节
获取 body 元素的子节点集合
var c=document.body.childNodes;
console.log(c);
<div id="box"></div>
<button id="btn" onclick="look()">点击,看一看</button>
<script>
// 单击“按钮”获取有关身体元素的子节点的信息 (看节点名称)
// 注意: 空格内元素看作是文本,文本是节点。
var btn=document.querySelector('#btn')
var box=document.getElementById('box')
btn.onclick=function(){
var c=document.body.childNodes;
console.log(c);
//定义临时变量
var text='';
//遍历
for(var i=0;i<c.length;i++){
text +=c[i].nodeName+'<br>'
}
console.log(text);
box.innerHTML=text;
}
</script>
预览:
从子节点列表中删除某个节点 ,把无序列表中的第一项删掉。
<ul id="myList"><li>Coffee</li><li>Tea</li><li>Milk</li></ul>
<p id="demo">单击按钮移除列表的第一项</p>
<button id="btn">删除</button>
<script>
//从子节点列表中删除某个节点 ,把无序列表中的第一项删掉。
var btn=document.querySelector('#btn')
btn.onclick=function(){
var myList=document.querySelector('#myList')
//移除节点
myList.removeChild(myList.childNodes[0])
}
</script>
预览:
1.1.2 DOM对象的常用属性
HTML DOM 允许 JavaScript 改变 HTML 元素的样式。
style.property=新样式
改变 HTML 样式
如需改变 HTML 元素的样式,请使用这个语法:
document.getElementById(id).style.property=新样式
改变文档主体的背景色,文本颜色,字体大小。
<p id="pt">
我是小鱼
</p>
<button id="btn">点击</button>
<script>
//改变文档主体的背景色,文本颜色,字体大小。
var btn=document.querySelector('#btn')
btn.onclick=function(){
document.body.style.backgroundColor='black'
document.body.style.color='yellow'
}
console.log(document.URL);
//获取得到字符集
console.log(document.charset);
</script>
预览:
document.title 返回或设置当前文档的标题
<title>document</title>
</head>
<body>
<script>
setTimeout(()=>{
document.title = '小余的个人技术博客';
},3000)
</script>
</body>
预览:
document.bgColor 设置页面背景色
document.fgColor设置前景色(文本颜色)
<p>
我是小鱼
</p>
<button id="btn">点击</button>
<script>
//改变文档主体的背景色,文本颜色,字体大小。
var btn=document.querySelector('#btn')
btn.onclick=function(){
document.bgColor='black'
document.fgColor='yellow'
document.body.style.fontSize='50px'
}
console.log(document.URL);
//获取得到字符集
console.log(document.charset);
</script>
预览:
document.URL 得到浏览器的地址,设置URL属性从而在同一窗口打开另一网页
URL 属性可返回当前文档的 URL。
注意:
//下面这种写法是错误的。
document.URL = "https://www.baidu.com";
//你可以把 当前 文档的URL 用这个属性拿到,给其他地方去使用。但是你不能给他赋新值
console.log(document.URL)
document 表示的是一个文档对象,windows 表示一个窗口对象。
一个窗口下面可以有很多的document对象。每个document 都有 一个URL。
document.charset得到字符集 例如 当前文档的字符编码集是 万国码UTF-8;或者是 简体中文gb2312
console.log(document.charset)
项目中常用的三个方法
classList .add() 在元素中添加一个或多个类名。
classList .remove() 移除元素中一个或多个类名。
classList.toggle() 在元素中切换类名。
document.getElementById("myDIV").classList.add("mystyle");
<p id="pt">
我是小鱼
</p>
<button id="btn">点击</button>
<style>
.red{
color:red;
}
.f30{
font-size:30px;
}
</style>
<script>
//改变文档主体的背景色,文本颜色,字体大小。
var btn=document.querySelector('#btn')
btn.onclick=function(){
var pt=document.querySelector('#pt');
pt.classList.add('red')
}
</script>
预览:
<script>
//改变文档主体的背景色,文本颜色,字体大小。
var btn=document.querySelector('#btn')
btn.onclick=function(){
var pt=document.querySelector('#pt');
pt.classList.add('f30')
}
</script>
预览:
<script>
//改变文档主体的背景色,文本颜色,字体大小。
var btn=document.querySelector('#btn')
btn.onclick=function(){
var pt=document.querySelector('#pt');
pt.classList.toggle('red');
}
</script>
预览: