查漏补缺 - JS三 WebAPI

目录

JavaScript 包括 EcmaScriptWebAPI

  • EcmaScript 包括 语言规范+标准库。浏览器和 node 环境都完整支持。
  • WebAPI 包括 BOM + DOM,是浏览器自己实现的,所以各个浏览器厂商可能略有区别。
    • BOM,Browser Object Model,浏览器模型,提供和浏览器相关的操作
    • DOM,Document Object Model,文档模型,提供和页面相关的操作

setTimeout 虽然是 WebAPI,但浏览器和 node 都实现了。node 中的全局对象是 global:global.setTimeout

BOM

主要指 window 对象的一些常用属性和函数。

  • location
  • history
  • setTimeout

经典启停计时器:

js 复制代码
var timerId = null;

function start() {
  if (timerId) {
    return;
  }
  timerId = setInterval(() => {
    console.clear();
    console.log(new Date().toLocaleString());
  }, 1000);
}

function stop() {
  clearInterval(timerId);
  timerId = null; // 否则 start 中判断永远为 true
}

history

提供当前窗口历史记录的操作。

无法获取历史记录,因为这是用户隐私。只能控制前进后退。

API 作用 备注
window.history.back() 后退
window.history.forward() 前进
window.history.go() 相对当前页面,进入指定记录页
window.history.pushState() 添加一条历史记录 页面不刷新
window.history.replaceState() 替换当前记录 页面不刷新

历史记录是一个模式,后进先出。

pushState 举例

DOM

操作DOM

1,dom.childrendom.childNodes 区别

二者得到的都是伪数组。

  • dom.children 获取 dom 的子元素
  • dom.childNodes 获取 dom 的子节点
html 复制代码
<div id="test">这是 <span>DOM</span>元素</div>

可以直接修改 DOM 元素的内容

js 复制代码
const div = document.querySelector("#test");
div.children[0].textContent = '123' // 也可以修改其他的属性,比如 innerHTML innerText

2,dom.remove()

是指从 DOM 树中删除,这个 js 对象还在。

3,其他常用 API

API 含义 备注
dom.previousElementSibling 得到 dom 前一个兄弟元素
dom.nextElementSibling 得到 dom 后一个兄弟元素
dom.parentElement 得到 dom 的父元素
dom.remove() 从文档树中删除 dom dom 对象还在
dom.removeChild() 删除 dom 的某个子节点 参数为 dom 对象
dom.insertBefore(newNode, referenceNode) 在 dom 的子节点中,添加一个新节点到指定节点之前 referenceNode 为指定节点
dom.appendChild() 添加一个新节点到 dom 的子节点末尾 参数为 dom 对象

DOM 属性

这里的【属性】,指 HTML 元素的【属性】

  • 标准属性:html元素自身拥有的。比如 a.hrefinput.valueimg.src
  • 自定义属性

1,标准属性

通过dom.属性名 获取,并有以下规则:

1,布尔属性会被自动转换为 boolean

2,路径类的属性会被转换为绝对路径

html 复制代码
<img src="./vue.svg" alt="" />

3,标准属性始终都是存在的,不管你是否设置该属性

4,class 由于和关键字重名,因此获取和设置 class 时使用 className

html 复制代码
<div class="test">123</div>

2,自定义属性

  • 获取 dom.setAttribute(name, value)
  • 设置 dom.getAttribute(name)

如果用获取自定义属性的 API 获取标准属性,获取的是 html 源代码中的内容

html 复制代码
<img src="./vue.svg" alt="" />

DOM 内容

dom.innerTextdom.innerHTML 这2个比较熟悉,不多赘述。

还有一个 dom.textContent,它和dom.innerText 的区别看这里

  • textContent 或获取所有元素的内容,包括隐藏的。
  • innerText 受 css 影响,只获取展示的内容。而且因为受 css 影响,为了确保获取最新的计算样式,会出发 reflow(重排)

vue 中的 v-html 通过 innerHTML 实现;v-text 通过 textContent 实现。

DOM样式

通过 window.getComputedStyle() 获取最终计算样式。

通过 dom.style 获取和设置内联样式,并有以下规则:

html 复制代码
<div style="color: red; font-size: 18px;">123</div>

1,当给样式赋值为空字符串时,相当于删除内联样式

js 复制代码
$0.style.color = '' // 删除 color 样式

2,当给样式的赋值不合法时,赋值语句无效,不会报错

js 复制代码
$0.style.color = 'abc' // color 保持原值,该语句不报错。

3,CSS 的短横线命名法,在属性名中表现为驼峰命名法

js 复制代码
$0.style.fontSize = '20px'

DOM事件

1,注册事件的对象

不同的对象,可以注册的事件列表

可以注册事件的对象包括 windowHTMLElementDocument

2,事件回调函数中的 this 指向注册事件的对象。

html 复制代码
<button>点击</button>
<script>
  let btn = document.querySelector("button");
  btn.addEventListener("click", function () {
    console.log(this);
  });
  btn = null;
</script>

上面的 this 依旧是 button 元素,因为 btn 只是存放了 button 元素对象的引用地址。

换句话说,通过 btn 给 button 元素注册事件后,btn 对事件处理函数来说,已经没用了。

3,DOM2DOM3 事件的区别

相关推荐
zhangjin12224 分钟前
kettle从入门到精通 第八十五课 ETL之kettle kettle中javascript步骤调用外部javascript/js文件
javascript·数据仓库·etl·kettle调用外部js
CaptainDrake6 分钟前
Vue:指令
前端·javascript·vue.js
软件技术NINI10 分钟前
HTML——基本标签
前端·javascript·html
卡兰芙的微笑34 分钟前
get_property --Cmakelist之中
前端·数据库·编辑器
覆水难收呀36 分钟前
三、(JS)JS中常见的表单事件
开发语言·前端·javascript
猿来如此呀44 分钟前
运行npm install 时,卡在sill idealTree buildDeps没有反应
前端·npm·node.js
hw_happy1 小时前
解决 npm ERR! node-sass 和 gyp ERR! node-gyp 报错问题
前端·npm·sass
FHKHH1 小时前
计算机网络第二章:作业 1: Web 服务器
服务器·前端·计算机网络
视觉小鸟1 小时前
【JVM安装MinIO】
前端·jvm·chrome
二川bro2 小时前
【已解决】Uncaught RangeError: Maximum depth reached
前端