一、理解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的转义符
&lt;内容&gt; 尖括号
&quot; 双引号
&apos; 单引号
&amp; and符号
&nbsp;
&copy;

设置内容的时候使用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的更多相关文章

  1. js入门之DOM动态创建数据

    一. 知识点回顾 1. DOM结构 nodeName: '' 标签名 nodeType: '' 类型 1元素节点 2属性节点 3文本节点 nodeValue: '' 如果是元素节点 nodeValue ...

  2. d3.js入门之DOM操作

    上篇成功在vue项目中把d3跑起来了,接下来对d3的基本操作做个汇总: 一.d3元素选择器 d3.select(".skill"):选择第一个类名为skill的元素并返回这个元素对 ...

  3. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  4. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  5. web前端开发分享-css,js入门篇(转)

    转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...

  6. React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了

    原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...

  7. web前端开发分享-css,js入门篇

    学习没有捷径,但学习是有技巧与方法.   一,css入门篇:   推荐书籍:css哪些事儿,精通css. 理由:css那些事儿,他是一本介绍css基础类的书,是入门的经典读物. 系统的介绍了css的选 ...

  8. Vue.js 入门指南

    1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...

  9. 【JavaScript】——JS入门

    结束XML之旅,開始JavaScript的学习,看视频.了解了她的前世今生,还是为她捏了把汗啊! 看了部分视 频了,简单的总结一下吧! JavaScript是什么? JavaScript是一种基于面向 ...

随机推荐

  1. oracle存储过程中%type的含义

    转: oracle存储过程中%type的含义 2018-11-07 11:43:56 lizhi_ma 阅读数 1361更多 分类专栏: 数据库   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  2. **209. Minimum Size Subarray Sum 长度最小的子数组

    1. 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nu ...

  3. 在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素找不到与此协定匹配的终结点元素(转)

    按语: 在项目中实现自动升级过程,在类库中调用webservice取升级update.xml文件,添加服务调用,但在类库中调用时就出现异常,但在简单的测试工程中没有问题.解决方法采用下面介绍的方法 在 ...

  4. @PathVariable设置为空的问题(required=false)

    参考了:http://www.imooc.com/qadetail/268268 最近学习springMVC的时候,学到@PathVariable后,发现@PathVariable有个required ...

  5. 单位rem 触屏适配总结

    总结过的:定宽320 缩放适配手机屏幕 参考文章:web app变革之rem 先了解一下rem css3 中引入了新的长度单位,rem. 官方定义 font size of the root elem ...

  6. Java基础教程:多线程杂谈——Volatile

    Java基础教程:多线程杂谈——Volatile 引入Volatile Java语言提供了一种稍弱的同步机制,即Volatile变量,用来确保将变量的更新操作通知到其他线程.当把变量声明为Volati ...

  7. 智能指针.Qt测试

    1.Qt598x64vs2017(或 Qt598x86vs2015[配置使用vs2017]).Win10x64 2.测试代码: 2.1.MainWindow.h class MainWindow : ...

  8. 一次性清除页面上的所有setInterval

    参考链接:https://www.cnblogs.com/liujinyu/p/3668575.html

  9. docker 搭建私有 docker hub

    查找registry 镜像 meiya@meiya:/etc/docker$ clear meiya@meiya:/etc/docker$ docker search registry NAME DE ...

  10. SFTP客户端与服务端

    什么是 SFTP ? 在了解 SFTP 之前,我们先看看什么是 FTP . FTP( File Transfer Protocol )文件传输协议,是一种常用来在两终端系统之间传输文件的方法. SFT ...