文章目录
-
- 什么是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>
运行效果
点击添加
点击添加