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="data: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="data: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>
js入门之DOM的更多相关文章
- js入门之DOM动态创建数据
一. 知识点回顾 1. DOM结构 nodeName: '' 标签名 nodeType: '' 类型 1元素节点 2属性节点 3文本节点 nodeValue: '' 如果是元素节点 nodeValue ...
- d3.js入门之DOM操作
上篇成功在vue项目中把d3跑起来了,接下来对d3的基本操作做个汇总: 一.d3元素选择器 d3.select(".skill"):选择第一个类名为skill的元素并返回这个元素对 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- web前端开发分享-css,js入门篇(转)
转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...
- React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了
原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...
- web前端开发分享-css,js入门篇
学习没有捷径,但学习是有技巧与方法. 一,css入门篇: 推荐书籍:css哪些事儿,精通css. 理由:css那些事儿,他是一本介绍css基础类的书,是入门的经典读物. 系统的介绍了css的选 ...
- Vue.js 入门指南
1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...
- 【JavaScript】——JS入门
结束XML之旅,開始JavaScript的学习,看视频.了解了她的前世今生,还是为她捏了把汗啊! 看了部分视 频了,简单的总结一下吧! JavaScript是什么? JavaScript是一种基于面向 ...
随机推荐
- Win10+Ubuntu18.04安装双系统
一:相关资料 (一)Win10+Ubuntu18.04 亲测UEFI启动模式双硬盘+双系统成功安装经验(文章) (二)如何安装Linux与windows双系统?(视频) 推荐先看视频,之后按照文章进行 ...
- 1264 - Out of range value for column
现象:新建数据库,字段类型是tinyint,然后插入数据,数值为128,报标题错误 原因:如果在新建数据库的时候没有指定为unsigned,那么就是有符号的,所以tinyint的范围是-128~127 ...
- iOS利用AFNetworking(AFN) 实现图片上传
1.上传图片以二进制流的形式上传 1 #pragma mark - 文件上传 2 - (IBAction)uploadImage 3 { 4 /* 5 此段代码如果需要修改, ...
- 【物联网】传感器+wifi传输+回复+显示
https://www.jianshu.com/p/cb0274d612b5 https://timgsa.baidu.com/timg?image&quality=80&size=b ...
- css文本超出部分省略号&CSS强制换行总结
word-break:break-all单词截断自动换行 word-break:break-all 例如div宽200px,它的内容就会到200px自动换行,如果该行末端有个英文单词很长(congra ...
- 原生JavaScript常用本地浏览器存储方法四(HTML5 LocalStorage sessionStorage)
HTML5 LocalStorage浏览器的支持的情况如上图,IE在8.0的时候就支持了.不过需要注意的是,IE测试的时候需要服务器环境(或者localhost). 测试自然是检测浏览器是否支持本地存 ...
- 基于jsplumb插件制作可拖拽、保存流程图、重绘保存后的流程图总结
1.重点参考博文 https://blog.csdn.net/j_bean/article/details/78092647 2.关键点总结 1)实现可视区域图形画满后,拖动整个画布的效果 a.最好不 ...
- 关于tornado的raise gen.Retuen()
raise gen.Return(response.body)在python3.3以后作用相当于return, 在python3.3之前作用是返回一个异常值, 和返回一个value python 3. ...
- python线程队列Queue-FIFO(35)
之前的文章中讲解很多关于线程间通信的知识,比如:线程互斥锁lock,线程事件event,线程条件变量condition 等等,这些都是在开发中经常使用的内容,而今天继续给大家讲解一个更重要的知识点 — ...
- circRNA数据库的建立
circRNA数据库的建立 wget http://circbase.org/download/human_hg19_circRNAs_putative_spliced_sequence.fa.g ...