文章目录
-
- 什么是DOM
- 浏览器内置解析器
- JavaSiript 如何修改结构与样式
-
- 浏览器解析顺序
- DOM相关API
-
- getElementById
- getElementsByTagName
- createElement
- innerText与innerHTML
- appendChild
- JavaScript 修改结构与样式案例
什么是DOM
浏览器内置解析器
浏览器内置两个解析器,一个是标签解析器,一个是脚本解析器,从上往下解析,如果出现解析异常则停止解析通过控制台报错,如果解析无误,则将整个
根据这个节点中的结构样式,创建一个文档对象模型格式如下:
document | html | | --------------------------------------- | | | | head body | | ---------- ---------------------- | | | | title meta button table | | tr | | td
JavaSiript 如何修改结构与样式
浏览器解析顺序
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>加载顺序</title>
<style>
</style>
<script>
window.onload = function(){
//根据id从全文拿取一个元素节点
let domBtn = document.getElementById('btn')
//当按钮单击时
domBtn.onclick = function(){
//alert('进来啦!')
}
}
</script>
</head>
<body>
<button id="btn">按钮</button>
</body>
</html>
如果这里去掉了
let domBtn = document.getElementById('btn')
从模型中根据btn这个id拿取元素节点,可是注意window.onload前提被删除了,整个页面还没有解析,模型未被创建,所以根本无法从模型中根据id拿取元素,所以报错。
那么是不是必须书写
不是必须书写,通常将
优先加载
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>加载顺序</title>
<style>
</style>
<script>
window.onload = function(){
//根据id从全文拿取一个元素节点
let domBtn = document.getElementById('btn')
//当按钮单击时
domBtn.onclick = function(){
//alert('进来啦!')
}
}
</script>
</head>
<body>
<button id="btn">按钮</button>
<script>
/*
* js如果放置在此处,则不需要每次都添加window.onload
* 页面的加载顺序应该是 html ==> css ==>js
*/
</script>
</body>
</html>
DOM相关API
getElementById
根据
let domBtn = document.getElementById('btn')
getElementsByTagName
根据
let domTb = document.getElementsByTagName('table')[0]
createElement
创建一个
let domTr = document.createElement('tr')
innerText与innerHTML
修改这个元素的节点,向内部添加文本或者超文本
添加前:
添加后:
不管是
//let domTr = document.createElement('tr')
domTr.innerHTML = '<td style="color:coral">我是添加的一列</td>'
appendChild
元素节点
元素节点中原先的子元素不受影响,追加到原先子元素之后
//let domTb = document.getElementsByTagName('table')[0]
//let domTr = document.createElement('tr')
domTb.appendChild(domTr)
JavaScript 修改结构与样式案例
通过修改
节点
.style. 样式名 = 样式值
注意:这里的样式名与
css:background-color js:backgroundColor
font-size ==> fontSize
//let domTb = document.getElementsByTagName('table')[0]
domTb.style.backgroundColor = 'rgb('+r+','+g+','+b+')'
代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文档对象模型</title>
<style>
table{
width:200px;
/* 重叠的边框合并成一条 */
border-collapse: collapse;
}
table,tr,td{
/* 显示边框 */
border:solid 2px red;
}
</style>
<script>
window.onload = function(){
//根据id从全文拿取一个元素节点
let domBtn = document.getElementById('btn')
//当按钮单击时
domBtn.onclick = function(){
let domTb = document.getElementsByTagName('table')[0]
console.log(domTb)
let domTr = document.createElement('tr')
console.log(domTr)
domTr.innerHTML = '<td style="color:coral">我是添加的一列</td>'
//将组装好的tr追加到table中作为子元素,不影响原先的子元素
domTb.appendChild(domTr)
/*
* Math:计算内置对象,专门用来进行数学运算
* Math.floor():返回小于或者等于一个给定数字的最大整数
* Math.random():返回介于 0(包含) ~ 1(不包含)之间的数
*
*/
let r = Math.floor(Math.random()*255)
let g = Math.floor(Math.random()*255)
let b = Math.floor(Math.random()*255)
/*
* 使用ES6提供的模板字符串来避免进行字符串的拼接
* `${要输出的值}`
*/
domTb.style.backgroundColor = `rgb(${r},${g},${b})`
}
}
</script>
</head>
<body>
<button id="btn">添加一行</button>
<table>
<tr>
<td>我是默认存在的一列</td>
</tr>
</table>
</body>
</html>
运行效果

点击添加

点击添加
