js入门之DOM
一、理解Web API
Web API Application Programming Interface 应用程序编程接口, 是一个预先定义好的函数和方法 目的是提供应用程序与开发人员基于某软件或硬件。 任何开发语言都有自己的API API的特征输入和输出(I/O) API的使用方法(console.log()) Web API 的概念 浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM) 此处的Web API特指浏览器提供的API(一组方法) 掌握常见浏览器提供的API的调用方式
学习目标
1. 掌握API和Web API的概念
2. 掌握常见浏览器提供的API调用方式
3. 能通过Web API开发常见额页面交互功能
4. 能都利用搜索引擎解决问题
二、理解DOM的概念
Document Object Model 文档对象模型, 把文档抽象成对象的形式,对象给我们提供了属性和方法
用来处理可标记语言,DOM是一种基于树形的结构
文档: 一个网页可以称为文档
节点: 网页中所有内容都是节点(标签、 属性、 文本、 注释等)
元素: 网页中的标签
属性: 标签中的属性
DOM经常进行的操作
获取元素
对元素进行操作(设置其属性或调用其方法)
动态创建元素
事件(什么时候做相应的操作)
三、DOM操作
1. 获取页面元素
1.1 根据id获取页面元素
<script> var p = document.getElementById('p'); </script>
1.2 获取标签 返回一个伪数组
document.getElementsByTagName('div');
注意点: 获取到的集合是动态集合
1.3 查找某个标签下的子标签
var container = document.getElementById('container'); var divs = container.getElementsByTagName('div'); 在这里不能是ID
1.4 根据标签的属性获取元素
document.getElementsByName('main'); 不推荐使用
1.5 根据标签的class属性获取元素
document.getElementsByClassName('main') 有浏览器兼容问题
1.6 根据选择器查找元素 (有浏览器兼容问题)
var main = document.querySelector('.main'); 只返回一个元素 var main = document.querySelectorAll('.main'); 返回多个
三. 事件
事件: 触发响应 1. 获取按钮 2. 给按钮注册事件 事件名称 click 事件源: 谁触发的事件 事件处理函数 几乎所有的标签都可以添加事件 var btn = document.getElementById('btn') btn.onclick = function () { alert('别点我') }
案例1:点击按钮来回切换图片
<input type="button" id='btn' value="点我"> <br> <img src="image/denglun.jpg" id="mv" alt=""> <script> var btn = document.getElementById('btn'); var mv = document.getElementById('mv'); var flag = 1; btn.onclick = function() { if (flag === 1) { mv.src = 'image/dahua.jpg'; flag = 2; } else if (flag === 2) { mv.src = 'image/denglun.jpg'; flag = 1; } } </script>
案例2: 获取dom对象的属性值 和修改属性
<a id="link" href="http://www.baidu.com" title="我是百度">百度</a>
<img id="mv" src="image/dahua.jpg" alt="美女">
<script>
console.log(link.id);
link.href = 'http://google.com'
</script>
案例3:点击按钮div显示隐藏
<input id='btn' type="button" value="隐藏"> <br> <div id="box"></div> <script> var btn = document.getElementById('btn'); var isShow = true; btn.onclick = function () { var box = document.getElementById('box'); if (isShow) { box.className = 'hidden'; this.value = '显示'; isShow = false; } else { box.className = 'show'; this.value = '隐藏'; isShow = true; } } </script> 属性一般对应标签里的属性 事件处理函数中的this 事件源,谁调用的该事件 this就指向谁
案例4: 取消a标签的默认行为
<a id='link' href="http://www.baidu.com">百度</a> <script> var link = document.getElementById('link'); link.onclick = function () { alert('点击我了'); return false; } </script>
四、innerHTML 和innerText
获取开始标签和结束标签之间的内容 innerHTML 获取内容的时候如果内容中有标签,或把标签获取到 innerText 如果内容中有标签,会把标签过滤掉,还会把前后的换行和空白都去掉 HTML的转义符 <内容> 尖括号 " 双引号 ' 单引号 & and符号 ©
设置内容的时候使用innerText(textContent) 效率高
设置含标签的时候使用innerHTML
解决ininnerText兼容问题
<div id="box">hello</div> <script> var box = document.getElementById('box'); console.log(getInnerText(box)); function getInnerText(element) { if (typeof element.innerText === 'string') { return element.innerText; } else { return element.textContent; } } </script>
五、表单元素设置
value 用于大部分表单的内容获取(option除外)
type 可以读取input标签的类型 ()
disabled
checked
selected
表单元素跟非表单元素使用差不多
不同的地方只有disabled checked selected 这几个的属性只有true和false
案例1:给文本框赋值
<input type="text"> <br> <input type="text"> <br> <input type="text"> <br> <input type="text"> <br> <input id="btn" type="button" value="获取文本框的值"> <script> var inputs = document.getElementsByTagName('input'); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type === 'text') { input.value = i; } } var btn = document.getElementById('btn'); btn.onclick = function () { var array = [] for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type === 'text') { array.push(input.value); } } console.log(array.join('|')) }
案例2:检测用户名和密码
<input type="text" id='txtUserName'> <br> <input type="password" id='txtUserPassword'> <br> <input type="button" id="btnLogin" value=" 登 录 "> <script> var btnLogin = document.getElementById('btnLogin'); btnLogin.onclick = function () { var txtUserName = document.getElementById('txtUserName'); var txtUserPassword = document.getElementById('txtUserPassword') if (txtUserName.value.length < 3 || txtUserName.value.length > 6) { txtUserName.className = 'bg'; return; } else { txtUserName.className = ''; } if (txtUserPassword.value.length < 6 || txtUserPassword.value.length > 8) { txtUserPassword.className = 'bg'; return; } else { txtUserPassword.className = ''; } console.log('执行登录'); } </script>
案例3: 设置下拉框中的选中项
<input type="button" value="设置" id='btnSet'> <select name="" id="selCities"> <option value="1">北京</option> <option value="2">上海</option> <option value="3">杭州</option> <option value="4">郑州</option> <option value="5">武汉</option> </select> <script> var btnSet = document.getElementById('btnSet'); btnSet.onclick = function () { var selCities = document.getElementById('selCities'); var options = selCities.getElementsByTagName('option'); var randomIndex = parseInt(Math.random() * options.length); var option = options[randomIndex]; option.selected = true; }
案例4: 获取焦点的事件是focus 和失去焦点 blur
<style> .gray { color: gray; } .black { color: black; } </style> </head> <body> <input type="text" class="gray" value="请输入搜索关键字" id="txtSearch"> <input type="button" value="搜索" id="btnSearch"> <script> var txtSearch = document.getElementById('txtSearch'); txtSearch.onfocus = function () { if (this.value === '请输入搜索关键字') { this.value = ''; this.className = 'black'; } } txtSearch.onblur = function () { if (this.value.length === 0 || this.value === '请输入搜索关键字') { this.value = '请输入搜索关键字'; this.className = 'gray'; } } </script>
案例5: 全选和反选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { padding: 0; margin: 0; } .wrap { width: 300px; margin: 100px auto 0; } table { border-collapse: collapse; border-spacing: 0; border: 1px solid #c0c0c0; width: 300px; } th, td { border: 1px solid #d0d0d0; color: #404060; padding: 10px; } th { background-color: #09c; font: bold 16px "微软雅黑"; color: #fff; } td { font: 14px "微软雅黑"; } tbody tr { background-color: #f0f0f0; } tbody tr:hover { cursor: pointer; background-color: #fafafa; } </style> </head> <body> <div class="wrap"> <table> <thead> <tr> <th> <input type="checkbox" name="" id="j_cbAll"> </th> <th>商品</th> <th>价格</th> </tr> </thead> <tbody id='j_tb'> <tr> <td> <input type="checkbox"> </td> <td>iPhone8</td> <td>6000</td> </tr> <tr> <td> <input type="checkbox"> </td> <td>iWatch</td> <td>6000</td> </tr> <tr> <td> <input type="checkbox"> </td> <td>iPad</td> <td>2000</td> </tr> <tr> <td> <input type="checkbox"> </td> <td>Mac Pro</td> <td>16000</td> </tr> </tbody> </table> <input type="button" value="反 选" id="btn"> <script> var j_cbAll = document.getElementById('j_cbAll'); var j_tb = document.getElementById('j_tb'); var inputs = j_tb.getElementsByTagName('input'); j_cbAll.onclick = function () { for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type === 'checkbox') { input.checked = this.checked; } } } for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type !== 'checkbox') { continue; } input.onclick = function () { checkAllCheckBox() } } function checkAllCheckBox () { var isAllChecked = true; for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type !== 'checkbox') { continue; } if (!input.checked) { isAllChecked = false; } } j_cbAll.checked = isAllChecked; } var btn = document.getElementById('btn') btn.onclick = function () { for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.type !== 'checkbox') { continue; } input.checked = !input.checked; checkAllCheckBox(); } } </script> </div> </body> </html>
六、 自定义属性操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="box" age="18" personId="1">张三</div> <script> var box = document.getElementById('box'); console.log(box.id); console.log(box.getAttribute('age')); box.setAttribute('geder','male'); box.removeAttribute('personId'); </script> </body> </html>
We are down, but not beaten. tested but not defeated.