Skip to content
Netflix - 每月低至 25 元

第14章 Web API

DOM

获取页面元素

  • 通过 id 获取元素
  • 通过 tag 获取元素
  • 通过 name 获取元素
  • 通过 class 获取元素
js
document.getElementById('idStr');
document.getElementsByTagName('tagStr');
document.getElementsByName('nameStr');
document.getElementsByClassName('classStr');
  • 通过 querySelector 获取元素
  • 通过 qurrySelectorAll 获取元素
js
document.querySelector('选择器');
document.querySelectorAll('选择器');
  • 获取 body 元素
  • 获取 html 元素
js
document.body;
document.documentElement;

属性

Property 属性(内置)

  • 修改对象属性,不会体现到 HTML 结构中

  • 用于修改 style、className、innerText、innerHtml

js
element.属性 = '值';

Attribute 属性(自定义)

  • 修改 HTML 属性,会改变 HTML 结构

  • 通过 getAttribute 方法获取属性

  • 通过 setAttribute 方法修改属性

  • 通过 removeAttribute 方法移除属性

js
element.getAttribute('属性');
element.setAttribute('属性','值');
element.removeAttribute('属性');

节点

节点操作

  • createElement 用于创建节点
  • appendChild 用于添加节点(添加到最后)
  • 若 appendChild 中的节点为现有节点,则是移动,而不是添加
js
// 1.创建节点 createElement()
const li = document.createElement('li');
// 2.添加节点 node.appendChild(child)
ul.appendChild(li);
// 3.添加节点(添加到指定元素的前面) node.insertBefore(child, 指定元素)
ul.insertBefore(li, ul.children[0]); // 插入到第一个
// 4. 删除节点 node.removeChild(child)
ul.removeChild(ul.children[0]);
// 5.复制节点 node.cloneNode() 参数为false或空 为浅拷贝 只复制标签 参数为true 为深拷贝
ul.children[0].cloneNode();

父子节点

  • 父节点 parentNode
  • 子节点 childNodes(获取所有节点 包含元素节点 文本节点等等) 不常用
  • 子节点 children(获取所有的子元素节点) 常用
js
// 父节
element.parentNode;

// 子节点
element.childNodes;
element.children;

// 第一个子节点
parentNode.firstChild; // 所有节点
parentNode.firstElementChild; // 元素节点
parentNode.children[0];  // 推荐

// 最后一个子节点
parentNode.lastChild; // 所有节点
parentNode.lastElementChild; // 元素节点
parentNode.children[parent.children.length - 1]; // 推荐

兄弟节点

js
// 下一个兄弟节点
node.nextSibling; // 所有节点
node.nextElementSibling; // 元素节点

// 上一个兄弟节点
node.previousSibling; // 所有节点
node.previousElementSibling; // 元素节点

性能优化

  • DOM 查询做缓存
js
const p = document.querySelectorAll('p');
const length = p.length;
for (let i = 0; i < length; i++) { }
  • 将频繁操作改为一次性操作
js
// 创建一个文档片段
const frag = document.createDocumentFragment();

for (let i = 0; i < 10; i++) {
  const li = document.createElement('li');
  li.innerHTML = 'Item' + i;
  frag.appendChild(li);
}

document.body.appendChild(frag);

BOM

  • navigator 用于获取浏览器相关信息
js
const ua = navigator.userAgent;
const isChrome = ua.indexOf('Chrome');
  • screen 用于获取屏幕相关信息
js
screen.width;
screen.height;
  • location 用于获取 URL 相关信息
js
// http://127.0.0.1:5500/index.html?username=zhichao#title
location.href; // URL 
location.protocol; // 协议 http:
location.host; // 主机名 127.0.0.1:5500
location.search; // query参数 ?username=zhichao
location.hash; // Hash地址 #title
location.pathname; // 路径 /index.html
  • history 用于操作历史记录
js
history.back();
history.forword();

事件

注册事件

  • 传统注册方式
  • 方法监听注册方式
js
// 传统
btn.onclick = funtion() {}
// 方法监听
btn.addEventListener('click',function() {},[true/false]); // true 为捕获阶段,false 或空为冒泡阶段

删除事件

js
// 传统注册方式
btn.onclick = funtion() {
    div.onclick = null
}
// 方法监听注册方式
btn.addEventListener('click',fn)

function fn() {
    btn.removeEventListner('click',fn)
}

事件对象

js
btn.onclick = funtion(e) {
    e.target // 返回触发事件的对象
    e.type // 返回事件的类型 比如 click mouseover
    e.preventDefault() // 阻止默认事件
    e.stopPropagation() // 阻止冒泡
}

事件代理

  • 将事件绑定到父元素上
  • 减少浏览器内存占用

存储

cookie

  • 本身用于浏览器和 server 通讯

  • document.cookie 设置 cookie

  • 设置 cookie 时会追加而不是覆盖

  • 缺点

    • 存储大小,最大 4KB
    • HTTP 请求时需要发送至服务端,增加请求数据量

localStorage & sessionStorage

  • 最大可存 5M
  • 通过 getItem 与 setItem 进行操作
  • localStorage 会永久存储
  • sessionStorage 浏览器关闭则会清空
关注微信公众号RackNerd - 美国 163 直连线路
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0

预览:

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3