一、理解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. LDFLAGS 与 LDLIBS

    今天下载了开源程序“贪吃蛇” (github地址 : https://github.com/taylorconor/tinytetris.git) 在编译时,出现如下错 linux:~/code/ot ...

  2. 【Redis】CacheCloud介绍及快速开始

    CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone.Redis Sentinel.Redis Cluster)自动部署.解 ...

  3. VMware 快速克隆出多个 Linux centos7 环境

    这样一台系统就已经克隆好了,但是,现在还没有完,因为是克隆的,里面的ip地址和创建的主机名都是一样,需要进行修改 登录服务器,然后使用 [ifcfg-ens33需根据实际情况而定] vi /etc/s ...

  4. Spring Cloud Hystrix 服务容错保护 5.1

    Spring Cloud Hystrix介绍 在微服务架构中,通常会存在多个服务层调用的情况,如果基础服务出现故障可能会发生级联传递,导致整个服务链上的服务不可用为了解决服务级联失败这种问题,在分布式 ...

  5. (十三)class文件结构:常量池(转)

    Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗 ...

  6. 无法复制CSD内容,复制后出现一行长字符串解决

    先打开一个linux文件,然后把复制的内容放到linux文件中即可解决

  7. C#获取IP及MAC地址 方法

    C#获取IP及MAC地址 方法,比较齐全 using System.Net; using System; using System.Management; using System.Runtime.I ...

  8. 神啊,看看Log4Net这个东西吧

    这个东西实在是让人感动的想哭囊…………-_-..... Log4Net.config文件 <?xml version="1.0" encoding="utf-8&q ...

  9. H5微信场景应用 audio模块

    css .bgAudio{width:27px;height:27px;position:fixed;right:10px;top:10px;z-index:999;-webkit-tap-highl ...

  10. kubectl exec 执行 容器命令

    格式如下: kubectl exec -it podName -c containerName -n namespace -- shell comand 1 创建目录 kubectl exec -it ...