文章目录
- 1. WebAPI 背景知识
-
- 1.1 什么是 WebAPI
- 1.2 DOM 基本概念
-
- 什么是 DOM
- DOM 树
- 重要概念:
- 2. 获取元素
-
- 2.1 querySelector
- 2.2 querySelectorAll
- 3. 操作元素
-
- 3.1 获取/修改元素内容
-
- 1. innerText
- 2. innerHTML
- 3.2 获取/修改元素属性
- 3.3 获取/修改表单元素属性
-
- 代码示例1: 播放 暂停的转换.
- 代码示例2: 计数
- 代码示例3: 全选/取消全选按钮
- 3.4 获取/修改样式属性
-
- 1. 行内样式操作
-
- **代码示例:** 字体变大
- 2. 类名样式操作
-
- 代码示例: 背景颜色变化
- 4. 操作节点
-
- 4.1 新增节点
-
- 代码示例:
- 代码示例: 当一个节点插入两次,相当于移动.
- 4.2 删除节点
-
- 代码示例:
- 5. 实现几个案例
-
- 5.1 猜数字
- 5.2 表白墙
- 5.3 待办事项
1. WebAPI 背景知识 1.1 什么是 WebAPI JS 分成三个大的部分:
- ECMAScript: 基础语法部分
- DOM API: 操作页面结构
- BOM API: 操作浏览器
1.2 DOM 基本概念 什么是 DOM
DOM 全称为
Document Object Model
.W3C 标准给我们提供了一系列的函数, 让我们可以操作:
- 网页内容
- 网页结构
- 网页样式
一个页面的结构是一个树形结构, 称为 DOM 树.
文章图片
重要概念:
- 文档: 一个页面就是一个 文档, 使用
document
表示. - 元素: 页面中所有的标签都称为 元素. 使用
element
表示. - 节点: 网页中所有的内容都可以称为 节点(标签节点, 注释节点, 文本节点, 属性节点等). 使用
node
表示.
querySelector
能够完全复用前面学过的 CSS 选择器知识, 达到更快捷更精准的方式获取到元素对象语法格式:
let element = document.querySelector(selectirs);
selectors
填一个或者多个选择器
abc
def
>
let one = document.querySelector('.one');
console.log(one);
let two = document.querySelector('#two');
console.log(two);
let three = document.querySelector('input');
console.log(three);
运行截图
文章图片
2.2 querySelectorAll 如果您需要与指定选择器匹配的所有元素的列表,则应该使用
querySelectorAll()
使用示例:
123
456
>
let divs = document.querySelectorAll('div');
console.log(divs);
运行截图
文章图片
3. 操作元素 3.1 获取/修改元素内容 1. innerText
Element.innerText
属性表示一个节点及其后代的“渲染”文本内容注: 不识别 html 标签. 是非标准的(IE发起的). 读取结果不保留html源码中的 换行和空格.
使用示例:
hello world
hello world
>
let div = document.querySelector('.two');
console.log(div);
div.innerText = 'world hello';
运行截图:
通过
innerText
无法获取到 div
内部的 html
结构, 只能得到文本内容.文章图片
2. innerHTML
Element.innerHTML
属性设置或获取HTML语法表示的元素的后代注意:
- 识别 html 标签. W3C 标准的. 读取结果保留html源码中的 换行 和 空格
hello world
hello world
>
let div = document.querySelector('.two');
console.log(div);
div.innerHTML = 'world hello';
运行截图:
innerHTML
不光能获取到页面的 html
结构, 同时也能修改结构. 并且获取到的内容保留的空格和换行文章图片
3.2 获取/修改元素属性 注: 通过
element.属性
来获取属性代码示例:
文章图片
>
let img = document.querySelector('img');
img.onclick = function() {
if(img.title.lastIndexOf("男") != -1){
img.src = 'https://www.it610.com/article/female.png';
img.title = '女';
}else{
img.src = 'https://www.it610.com/article/male.png';
img.title = '男';
}
}
运行结果:
文章图片
3.3 获取/修改表单元素属性 代码示例1: 播放 暂停的转换.
>
let input = document.querySelector('input');
input.onclick = function() {
if(input.value =https://www.it610.com/article/='播放'){
input.valuehttps://www.it610.com/article/= 'https://www.it610.com/article/暂停';
}else{
input.valuehttps://www.it610.com/article/= 'https://www.it610.com/article/播放';
}
}
运行截图:
文章图片
代码示例2: 计数
>
let one = document.querySelector('#one');
let add = document.querySelector('#add');
add.onclick = function() {
one.value++;
}
文章图片
代码示例3: 全选/取消全选按钮
选择你喜欢玩的游戏
王者荣耀
和平精英
开心消消乐
我的世界
全选
>
let games = document.querySelectorAll('.game');
let all = document.querySelector('.all');
all.onclick = function(){
for (let i = 0;
i < games.length;
i++) {
games[i].checked = all.checked;
}
}
for (let i = 0;
i < games.length;
i++) {
games[i].onclick = function() {
all.checked = allChecked();
}
}function allChecked() {
for (let i = 0;
i < games.length;
i++) {
if(!games[i].checked){
return false;
}
}
return true;
}
运行截图
文章图片
3.4 获取/修改样式属性 CSS 中指定给元素的属性, 都可以通过 JS 来修改
style 中的属性都是使用 驼峰命名 的方式和 CSS 属性对应的.1. 行内样式操作
例如:font-size => fontSize
,background-color => backgroundColor
等
element.style.[属性名] = [属性值];
element.style.cssText = [属性名+属性值];
代码示例: 字体变大
你好
>
let div = document.querySelector('div');
div.onclick = function() {
let fontSize = parseInt(div.style.fontSize);
fontSize += 10;
div.style.fontSize = fontSize + "px";
//注意有单位的要带上单位
}
运行截图:
文章图片
2. 类名样式操作
element.className = [CSS 类名];
代码示例: 背景颜色变化
>
html,body{
height: 100%;
width: 100%;
}
div {
height: 100%;
width: 100%;
}
.black{
background-color:black;
color: gray;
}
.gray {
background-color: gray;
color: black;
}
你好!
>
let div = document.querySelector('div');
div.onclick = function() {
if(div.className.indexOf("black") != -1){
div.className = 'gray';
}else{
div.className = 'black';
}
}
运行截图:
文章图片
4. 操作节点 4.1 新增节点 分为两个步骤:
- 创建元素节点
①createElement
创建元素节点.
②createTextNode
创建文本节点
③createComment
创建注释节点
④createAttribute
创建属性节点 - 插入节点到 dom 树中
① 使用appendChild
将节点插入到指定节点的最后一个孩子之后
②使用insertBefore
将节点插入到指定节点之前
>
let div = document.createElement('div');
div.id = 'mydiv';
div.className = 'one';
div.innerHTML = 'hehe';
let test = document.querySelector('.test');
test.appendChild(div);
运行截图:
文章图片
代码示例: 当一个节点插入两次,相当于移动.
1
2
3
4
>
let child = document.createElement('div');
child.innerHTML = '100';
let parent = document.querySelector('.parent');
// 本来有四个元素,0号元素没有,就插入一个元素
parent.insertBefore(child,parent.children[0]);
// 插入到2号元素前,1号元素是1不是child,2号元素是2.
parent.insertBefore(child,parent.children[2]);
运行结果:
文章图片
4.2 删除节点 使用
removeChild
删除子节点oldChild = element.removeChild(child);
注: 如果 child 不是 element 的子节点,会抛异常
代码示例:
1
2
3
>
let parent = document.querySelector('.parent');
let childs = document.querySelectorAll('.child');
parent.removeChild(childs[1]);
运行结果:
文章图片
5. 实现几个案例 5.1 猜数字
猜数字 - 锐客网
请输入要猜的数字:
已经猜的次数: class="count">0
结果: class="result">
>
let guessNum = document.querySelector('.guessNum');
let press = document.querySelector('.press');
let count = document.querySelector('.count');
let result = document.querySelector('.result');
let countCount = 0;
let guessResult = Math.floor(Math.random()*100)+1;
press.onclick = function(){
countCount++;
count.innerHTML = countCount;
guessNumber = parseInt(guessNum.value);
if(guessNumber == guessResult){
result.innerHTML = '猜对了';
result.style = 'color : red';
}else if(guessNumber < guessResult){
result.innerHTML = '猜小了';
result.style = 'color : blue';
}else{
result.innerHTML = '猜大了';
result.style = 'color : orange';
}
}let again = document.querySelector('.again');
again.onclick = function() {
guessResult = Math.floor(Math.random()*100)+1;
countCount = 0;
count.innerHTML = 0;
guessNum.valuehttps://www.it610.com/article/= '';
result.innerHTML ='';
}
运行截图:
文章图片
5.2 表白墙
表白墙 - 锐客网
表白墙
输入后点击提交,会将信息显示在表格中
class="two">谁:
class="two">对谁:
class="two">说什么:
>
/* 去除浏览器默认样式 */
* {
margin: 0;
padding: 0;
}
/* 设置总宽度 */
.parent {
width: 400px;
margin: 0 auto;
}
/* 涉资表白墙样式 */
#wall {
font-size: 30px;
font-weight: 700;
text-align: center;
margin: 5px;
}
/* 设置提示信息样式 */
#remind{
font-size:13px;
text-align: center;
color:gray;
margin: 5px;
}
/* 设置弹性布局 */
.one {
display: flex;
justify-content: center;
align-items: center;
height: 40px;
}
/* 设置文字内容 */
.two {
width: 100px;
line-height: 40px;
}
/* 设置输入框 */
.one .text{
width: 200px;
height: 20px;
}
/* 提交按钮的设置 */
.one .press{
width: 304px;
height: 40px;
color:white;
background-color: orange;
border-radius: 5px;
border: none;
}
/* 设置鼠标点击的时候改变颜色 */
.one .press:active{
background-color: red;
}
/* 提交之和内容的设置 */
.elem {
text-align: center;
}
>
// 获取到输入框元素
let texts = document.querySelectorAll('.text');
// 获取到提交按钮元素
let press = document.querySelector('.press');
// 设置单击事件
press.onclick = function() {
let user1 = texts[0].value;
let user2 = texts[1].value;
let message = texts[2].value;
// 如果有一个为空,就提交不成功
if(user1=='' || user2=='' || message==''){
return;
}
// 这里都不为空,创建新的节点
let elem = document.createElement('div');
elem.className = 'elem';
elem.innerHTML = user1 + '对' + user2 + '说: ' +message;
// 插入新的节点
let parent = document.querySelector('.parent');
parent.appendChild(elem);
// 提交之后,将输入框置空.
for(let i = 0;
i < 3;
i++){
texts[i].value='';
}
}
运行截图:
文章图片
5.3 待办事项
待办事项 - 锐客网
未完成
已完成
>
/* 去除浏览器默认样式 */
* {
margin: 0;
padding: 0;
}
/* 设置宽度 */
.parent {
width: 840px;
margin: 0 auto;
}
/* 设置输入框和新建的样式 */
.one {
height: 50px;
padding: 20px;
}
/* 设置输入框样式 */
.one .text{
height: 50px;
width: 600px;
}
/* 设置提交框样式 */
.one .submit {
background-color: orange;
color: white;
height: 50px;
width: 196px;
border: none;
}
/* 设置点击时的背景 */
.one .submit:active{
background-color: red;
}
/* 设置已完成和未完成的样式 */
.two{
width: 800px;
height: 800px;
display: flex;
margin: 0 auto;
}
/* 设置未完成和已完成字体样式 */
.two h3 {
height: 50px;
text-align: center;
line-height: 50px;
background-color: black;
color: white;
}
/* 设置未完成左边的样式 */
.left {
width: 50%;
height: 100%;
}
/* 设置已完成右边的样式 */
.right {
width: 50%;
height: 100%;
}
/* 新建任务的样式 */
.row {
height: 50px;
display: flex;
align-items: center;
}
/* 新建任务字体的样式 */
.row span {
width: 340px;
}
/* 新建任务的删除按钮样式 */
.row button{
width: 40px;
height: 40px;
}
>
// 首先获取新建按钮元素
let submit = document.querySelector('.submit');
// 设置鼠标单击事件
submit.onclick = function() {
// 获取输入框元素
let text = document.querySelector('.text');
// 判断输入框内容是否为空
if(text.value =https://www.it610.com/article/='') return;
// 新建代办事项
let row = document.createElement('div');
row.className='row';
let checkBox = document.createElement('input');
checkBox.type='checkbox';
let thing = document.createElement('span');
thing.innerHTML = text.value;
let del = document.createElement('button');
del.innerHTML='删除';
row.appendChild(checkBox);
row.appendChild(thing);
row.appendChild(del);
// 获取左边元素
let left = document.querySelector('.left');
left.appendChild(row);
// 添加节点之后置空
text.value='';
// 设置选择框的鼠标单击事件
checkBox.onclick = function() {
// 如果被选择了就移动已完成
// 如果未完成就移动到未完成
if(checkBox.checked){
let target = document.querySelector('.right');
target.appendChild(row);
}else{
let target = document.q
uerySelector('.left');
target.appendChild(row);
}
}
// 设置删除按钮的鼠标单击事件
del.onclick = function() {
// 使用 parentNode 获取到父节点
let parent = row.parentNode;
// 删除该节点
parent.removeChild(row);
}
}
【前端|前端 --- JavaScript WebAPI】运行截图:
文章图片
推荐阅读
- 前端|前端 --- JavaScript 语法基础
- js 截取文件后缀名
- 3D 沙盒游戏之人物的点击行走移动
- 在setTimeout里设置倒数5秒计时的方法
- vscode|VScode 常用30个插件,非常全面!
- CSS|Web前端入门之CSS基础笔记
- html网页设计作业|web期末作业设计网页 HTML5+CSS大作业——明星个人主页(15页) 创作主页
- web大学生个人网站作业模|html大作业网页代码——神之刃游戏官网网页(6页) HTML+CSS+JavaScript web网页设计与开发
- Vue|跨域问题(has been blocked by CORS policy:Response……)原因及解决办法