当前位置: 首页 > news >正文

JS Web

Web API

浏览器内置window对象,是最顶层的对象;

它代表的是整个浏览器js运行环境,所以这个对象的属性方法可以直接在js代码中使用,无需加 window. 作为前缀;

所有其他对象都是它的属性,通过它我们可以访问到其他重要的内置对象,例如history、location、document。

prompt、alert、confirm

prompt();//输入框

alert();//警告框

confirm(); //确认框

history、location

history:当前浏览器的 浏览历史对象

history.back(); //返回上次浏览地址(等于点击浏览器的返回按钮)

history.go(-1);//同上

history.forward();//前进一页(等于点击浏览器的前进按钮)

location:当前浏览器的 地址对象

location.href = 'main.html';//设置当前浏览地址

location.reload();//重新加载网页(刷新网页)

localStorage、sessionStorage

 localStorage:相当于本地键值对数据库,用于存储浏览器中的一些数据,以键值对的形式存储;关闭浏览器窗口后,不会丢失数据

localStorage.setItem('myCat' , 'Tom'); //存入/修改数据

const cat = localStorage.getItem('myCat');//获取数据

localStorage.clear();//清除localStorage数据

 sessionStorage:同样的,就是关闭浏览器窗口后,会丢失数据

close、open

close();//关闭当前窗口

open();//打开一个新的窗口

open('https://www.byhy.net');//打开新窗口,访问指定url

open('https://www.byhy.net' , '_self');//直接在本窗口打开访问指定urls

document 

是window对象内置的属性,也可以说是js内置对象window.document;

其对应的是浏览器窗口内置的整个DOM对象;

DOM文档对象模型:

浏览器加载网页后,会在浏览器内部(内存)中创建一个文档对象模型DOM对象,对应树状的文档结构。

document对象的一些内置方法可以获取到DOM对象中的每个节点对象

获取元素对象 —— querySelector、querySelectorAll

querySelector :返回的是HTML中第一个符合选择表达式的元素

querySelectorAll:返回的是所有符合选择表达式的元素(一个类似数组的对象里面存放了所有符合条件的 DOM 对象)

// 数组里面的第2个元素

document.querySelectorAll('p')[1]

// 遍历

ps = document.querySelectorAll('p')

for (let p of ps) {

        console.log(p)

}

通过css选择器获取

document.querySelector('a');

根据id属性获取

document.querySelector('#result');

document.getElementByTagName("")

documrnt.getElementByClassName("")

document.getElementById("")

创建元素对象

document.createElement('span');

添加元素对象

document.append(span);

// 返回 body元素对象

document.body

// 返回 head元素对象

document.head

// 返回 当前窗口的标题

document.title

// 返回 当前窗口的url地址

document.URL

元素通用属性

EventTarget类型所提供的方法

addEventListener(); //用来注册处理该对象的事件的处理函数

removeEventListener(); //用于取消注册处理该对象的事件的处理函数

再触发事件,不会执行它的回调函数

Node类型所提供的属性和方法

childNodes :获取元素的所有子节点对象(不仅返回html元素对象,还有文本和注释)

textContent :获取元素内部的所有文本内容,包括隐藏部分(style="display:none")

                       该属性也可用来设置元素内部的文本内容 

parentElement:返回这个Node的父HTML元素

Element类型所提供的属性和方法

id:获取或设置该元素的id属性

children:获取该元素的所有子元素(只返回html元素对象)

innerHTML、outerHTML:innerHTML用于获取一个元素对象内部HTML文本;outerHTML用于获取一个元素对象的全部HTML文本

                                           当然除了获取HTML文本,也可以设置HTML文本

获取内部元素

获取上级元素

closet();//获取符合条件的最接近调用对象的上级元素(包括自身);其中参数是一个css选择表达式

添加元素

after();//给当前元素节点 添加一些后续弟弟节点

before();//给当前元素节点 添加一些前置哥哥节点

append();//给当前元素节点 添加一些子节点

如果添加的是一个元素的话,需要document.createElement()先创建一个元素对象;然后再调用新对象的方法创建内容,比较麻烦;这里介绍insertAdjacentHTML()方法,可以直接写元素对应的html文本内容。

两个参数:1参指定插入节点的位置;2参指定要插入的节点对应的HTML文本

  • afterbegin

    插入内容 作为 当前节点的 第一个子节点

  • beforeend

    插入内容 作为 当前节点的 最后一个子节点

  • beforebegin

    插入内容 作为 当前节点的 前一个哥哥节点

  • afterend

    插入内容 作为 当前节点的 下一个弟弟节点

删除元素

remove();//用于删除元素自身 

还可以

<body><p id='target1'>原来的元素1</p><p id='target2'>原来的元素2</p>
</body><script>document.getElementById('target1').outerHTML="";
</script>

替换元素

outerHTML 、 innerHTML 属性:innerHTML只换内部的东西,外部的不换

replaceWith();//必须先创建一个Element对象

获取元素属性

getAttribute();//返回值都是字符串的形式

对于元素的标准属性可以通过 元素对象.属性 的方式获取

设置元素属性

setAttribute();//两个参数都是字符串的形式

同样的,对于元素的标准属性可以通过 元素对象.属性 的方式设置

删除元素属性

removeAttribute();

className

用来获取和设置元素的class属性;但它是对class属性整体进行操作的

classList

只想单独操作class的某个属性,而不改变其它属性

该属性有三个较为常用的方法:

  • contains:用于判断class属性是否包含某个属性值
  • remove:删除某个属性,其他属性不动
  • add:添加某个属性

举个栗子:

<head><style>.hide {display:none}</style>
</head>
<body><button>隐藏/显示</button><div id='div1' class="type1">元素内容
</div><script>// 注册事件回调函数document.querySelector('button').addEventListener("click", function (){const ele = document.getElementById("div1"); if (ele.classList.contains('hide')){ele.classList.remove("hide");}else{ele.classList.add("hide");}});</script>
</body>
HTMLElement类型所提供的属性和方法

innerText、outerText:用于获取/设置元素内部的文本内容

注意:

1.对于innerText,Node类型的textContent属性也可以

区别在于:innterText展示的是该元素对应的可呈现在界面上的文本内容;而textContent展示的是元素内部所有的文本内容,包括不可见部分(style="dispaly = none")

而且innterText展示的时候有界面呈现,就是说在界面上什么样就输出什么样;textContent没有

2.outerText在设置元素的文本内容的时候,它是把整个元素变成了一个文本节点(原来的节点没有了,变成了一个新的文本节点)

focus();//在这种元素可以获取输入焦点的前提下,可让该元素获取输入焦点

click();//模拟鼠标点击该元素

style属性  改变单个属性时很有用,它的属性值是 CSSStyleDeclaration 类型, 类似 Object类型,可通过这个对象的属性来 获取、设置 元素的样式

<a id="link" style='color:green;text-decoration:underline'  href="/" >一个链接</a>let a = document.getElementById('link')
a.style.color = 'red'
a.style['text-decoration'] = 'none'

元素自身属性

a

常用属性:hash、host、hostname、href、origin、port、protocol、search

button

常用属性:disabled

表示该按钮是否被禁用,禁用为true,可用为false

image/img

常用属性:alt、height、width、src

alt:当图片显示失败时(eg.url错误),在图片位置显示的文本内容

height:img元素的高度,数字表示像素

src:对应img元素的url地址

input
通用属性

value:对应输入框里的文本

name

type

disable:表示该按钮是否被禁用,禁用为true,可用为false

类型为text,email,password,number 等这些输入框input的常见属性

maxLength/minLength:最多和最少输入的字符数量

placeholder

readOnly

size

select(); //全部选中输入框里的文本,但在调用该方法前通常需要先调用focus方法

setSelectionRange(selectionStart,selectionEnd); //选中指定部分内容,其中selectionStart指定了选中的开始 字符索引;selectionEnd指定了选中的结尾 字符索引 +1 (索引从0开始计数)

setRangeText(replacement,start,end); //用新字符串替换输入框中指定部分内容,其中replacement指定用来替换的字符串;start,end为可选参数,若缺省则会替换用户选中的那部分内容,若用户没有选中内容,就插入到光标的位置

其中类型为number的input输入框还有如下的属性:

max、min:指定了输入框可输入数字的最大最小值,一旦超过了该值就会有错误提示

step:表示输入框数字的增减单位;在指示输入框点击上下箭头时,会按这个step为粒度进行增减

类型为raido(单选按钮)、checkbox(勾选框)的input的常用属性

checked:表示是否选中

defaultChecked:表示页面刚加载完成时是否选中

textarea

value

rows/cols:分别指定输入框的行数和列数

disabled

disabled

maxLength/minLength

placeholder

wrap:值为soft,一行文字超宽度后剩余折到下一行显示,但实际内容并没有换行符;值为off,超宽度,不换行,textarea元素出现水平滚动条;值为hard,设置该值时,必须同时指定cols属性,这样一行文字超过文本框宽度,浏览器就会自动插入换行符,剩余内容折到下一行

select()

setSelectionRange(selectionStart, selectionEnd)

setRangeText(replacement, start, end)

select和option

select对应DOM对象类型;HTMLSelectElement 常用属性、方法有

options

value

selectedindex:返回/设置 第一个选定 option 元素的索引数字;值为 -1 表示未选择任何元素。

disabled:返回/设置 是否禁用选择框,被禁用后,就不能选择了

type:只读属性,返回 表示支持多选与否的字符串,当该select有multiple属性时(代表可多选),返回“select-multiple”; 否则,返回“select-one”

add(item,before)

remove(index)

option对应HTMLOptionElementDOM对象类型;HTMLOptionElement 常用属性、方法有

value

text

selected

index

事件处理

什么是事件处理:当某个事件发生时所执行的一段代码

定义事件处理的方式
addEventListener

任何一个元素对象都有addEventListener这个方法,因为每个HTML元素前面的继承链都是:EventTarget <- Node <- Element <- HTMLElement;EventTarget提供了addEventListener()方法,而js中子类会自动拥有父类的一切属性和方法。

注册事件回调函数(即当注册事件发生时回调执行我们的代码)

首先先获取DOM对象,看是在哪个元素上发生的事件;然后调用它的addEventListener函数,

document.querySelector('#go').addEventListener("click",() => {alert('执行salaryStats')}
);

也可以写成

function salaryStats(event){
//这里注意,这段代码不需要event为我们传入提供什么东西,可以不写alert('执行salaryStats');
}document.querySelector('#go').addEventListener("click",salaryStats);

//鼠标点击事件

element.addEventListener("click",handleFunc);

//键盘事件

element.addEventListener("keydown",handleFunc);

注意两个问题:

1.范围:

针对哪个元素dom对象调用addEventListener方法,就是在这个元素的范围内注册事件处理函数;非这个元素内发生的注册事件,不会触发调用

当然也可以在整个DOM范围内注册事件,对整个网页都有效

document.addEventListener("keydown",salaryStats);

2.如果这段script代码放在了head里,而不是body里就会导致一个问题

找不到document.querySelector('#go')这个对象,因为网页内容还没渲染完呢就先被执行了,DOM里面的内容还没创建都还没有body节点呢。

那这时我们可以指定一个页面加载事件,等页面加载完之后再执行这个注册事件回调函数

当页面资源全部加载完成,js引擎会发出load事件,我们可以

window.addEventListener('load',(event) => {//执行代码}
);

也可以

window.onload = () => {//执行代码
};
DOM对象的事件属性

这里的事件属性名以on开头,后面加事件名称

document.querySelector('#salary').onkeydown = () => {alert('执行salaryStats')};

 也可以写成

function salaryStats(event){
//这里注意,这段代码不需要event为我们传入提供什么东西,可以不写alert('执行salaryStats');
}document.querySelector('#salary').onkeydown = salaryStats;

//键盘事件

element.onkeydown = handleFunc;

//鼠标事件

 element.onclick = handleFunc;

事件对象和类型

事件对象event分别有KeyboardEvent键盘事件对象类型、MouseEvent鼠标事件对象类型;不同类型的对象 的属性、方法不同

比如:当传入的是键盘事件对象时,那它含有的属性为:ctrlkey如果事件发生时,ctrl键被按下,event.ctrlkey值为true;同样的还有altkey、shift、key;这个key是返回 事件发生时,按下按键的字符串表示

window.onload = () => {document.querySelector('#Salary').onkeydown = (event) => {if(event.ctrlkey && event.key == 'Enter'){document.querySelector('pre').innertext='hahahah';}
事件处理顺序

捕获阶段&非捕获阶段(目标阶段和冒泡阶段)

捕获阶段:从 浏览器DOM 顶层的 window 对象一直 传递下去,直到 触发事件的对象的父对象 ,这个过程称之为 capture Phase(捕获阶段)

非捕获阶段:

  • 到达触发事件的对象,这个过程称之为 target phase(目标阶段)

  • 从触发事件的对象,一直传递到顶层的window对象,这个过程称之为 bubbling Phase(冒泡阶段)

addEventListener的第3个参数,指定注册的处理函数在哪个阶段处理执行;缺省的话默认为false,也就是在非捕获阶段执行

举个栗子:点击内层元素 

1.alert次序:内 外 body 

<div id='outer' style='width:10rem;height:10rem;border:1px solid black'>  外层<div id='inner' style='width:6rem;height:6rem;border:1px solid black'>内层</div> 
</div> 
<br><br><script>    document.querySelector('#inner').addEventListener("click", e => alert('处理 inner'))document.querySelector('#outer').addEventListener("click", e => alert('处理 outer'))document.querySelector('body').addEventListener("click", e => alert('处理 body'))  
</script>

2.alert次序:body 外 内

<div id='outer' style='width:10rem;height:10rem;border:1px solid black'>  外层<div id='inner' style='width:6rem;height:6rem;border:1px solid black'>内层</div> 
</div> 
<br><br><script>    document.querySelector('#inner').addEventListener("click", e => alert('处理 inner'),true)document.querySelector('#outer').addEventListener("click", e => alert('处理 outer'),true)document.querySelector('body').addEventListener("click", e => alert('处理 body'),true)
</script>

3.alert次序:body 内 外 (捕获阶段先执行)

<div id='outer' style='width:10rem;height:10rem;border:1px solid black'>  外层<div id='inner' style='width:6rem;height:6rem;border:1px solid black'>内层</div> 
</div> 
<br><br><script>    document.querySelector('#inner').addEventListener("click", e => alert('处理 inner'))document.querySelector('#outer').addEventListener("click", e => alert('处理 outer'))document.querySelector('body').addEventListener("click", e => alert('处理 body'),true)
</script>
事件对象的target、currentTarget属性 

e.target :指代直接触发事件的那个DOM对象

e.currentTarget :指代当前正在处理事件的DOM对象,也就是当前处理函数注册对应的那个对象

在处理函数中,也可使用this,它等价于e.currentTarget

举个栗子:

<body><div id='outer' style='width:10rem;height:10rem;border:1px solid black'>  外层<div id='inner' style='width:6rem;height:6rem;border:1px solid black'>内层</div>  </div><br><button onclick='location.reload()'>重置</button><script>  function changeColor(e) {e.target.style.backgroundColor  = 'green'e.currentTarget.style.backgroundColor  = 'gray'} 
/*等价于function changeColor(e) {e.target.style.backgroundColor  = 'green'this.style.backgroundColor  = 'gray'} 
*/document.querySelector('#outer').addEventListener("click", changeColor )    </script></body>

 

Case1:点击内层 => 内绿外灰

触发点击,回调changeColor函数....

Case2:点击外层 => 内灰外灰

 外层灰,内层框没有被涉及到,颜色保持透明,显示的是外层框的颜色

本文参考自:简介 - 白月黑羽 (byhy.net)


http://www.mrgr.cn/news/27101.html

相关文章:

  • python容器四之字典
  • GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制
  • 随机查询若干数据,并根据全部数据的点击量排序的核心代码
  • list和vector的区别
  • 在 Mac 中设置环境变量
  • 性能测试的复习4-数据库连接、控制器、定时器
  • Spring Cloud常见面试题
  • 初学者指南:如何在Windows 11中自定义任务栏颜色,全面解析!
  • 【C#生态园】从基础到深度学习:探索C#机器学习库
  • Stream流的思想和获取Stream流
  • 共享单车轨迹数据分析:以厦门市共享单车数据为例(四)
  • 加速开发体验:为 Android Studio 设置国内镜像源
  • JavaScript --函数的作用域(全局和局部)
  • 测试质量体系的风险评估和应对措施有哪些
  • GO Server-Sent Events (SSE)
  • Cache Aside pattern
  • USB组合设备——鼠标+键盘(两个接口实现)
  • elementui组件el-upload实现批量文件上传
  • Unity生命周期_一些容易忽略的点>重复的生命周期代码会执行子类的。
  • thinkphp6开发的通用网站系统源码