博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[译]13 种有用的 JavaScript DOM 操作
阅读量:6272 次
发布时间:2019-06-22

本文共 3331 字,大约阅读时间需要 11 分钟。

  • 原文地址:
  • 原文作者:
  • 译文出自:
  • 本文永久链接:
  • 译者:
  • 校对者:,

介绍

DOM(Document Object Model)是网页上所有对象的基础。它描述文档的结构,并且为编程语言提供操作页面的接口。它被构造成逻辑树。每个分支以节点结束,每个节点包含有子节点。DOM API 有很多,在本文里面,我仅介绍一些我认为最有用的 API。

document.querySelector / document.querySelectorAll

document.querySelector 方法返回文档中与给定选择器组匹配的第一个元素。

document.querySelectorAll 返回与给定选择器组匹配的文档中的元素列表。

// 返回第一个元素const list = document.querySelector('ul');// 返回所有类名为 intro 或 warning 的 div 元素const elements = document.querySelectorAll('div.info, div.warning');复制代码

document.createElement

这个方法会通过给定的标签名称来创建一个 HTMLElement。返回值是新创建的元素。

Node.appendChild

Node.appendChild() 这个方法能够将节点添加到给定父节点的子节点列表的末尾。请注意,如果给定要添加的子节点是文档中现有节点的引用,则它将会被移动到子节点列表的末尾。

让我们看看这两种方法的作用:

let list = document.createElement('ul'); // 创建一个新的 ul 元素['Paris', 'London', 'New York'].forEach(city => {    let listItem = document.createElement('li');    listItem.innerText = city;    list.appendChild(listItem);});document.body.appendChild(list);复制代码

Node.insertBefore

这个方法在指定父节点内的某个子节点之前插入给定节点(并返回插入的节点)。下面是使用该方法的一个伪代码:

  1. Paris
  2. London
  3. New York

Node.insertBefore(San Francisco, Paris)

  1. San Francisco
  2. Paris
  3. London
  4. New York
let list = document.querySelector('ul');let firstCity = list.querySelector('ul > li'); // 这里我们可以使用 list.firstChild,但是这篇文章的目的是介绍 DOM APIlet newCity = document.createElement('li');newCity.textContent = 'San Francisco';list.insertBefore(newCity, firstCity);复制代码

Node.removeChild

Node.removeChild 方法从 DOM 中删除子节点并且返回已删除的节点。请注意返回的节点已经不再是 DOM 的一部分,但仍然保存在内存中。如果处理不当,可能会导致内存泄漏。

let list = document.querySelector('ul');let firstItem = list.querySelector('li');let removedItem = list.removeChild(firstItem);复制代码

Node.replaceChild

该方法用于替换父节点中的子节点(并且会返回被替换的子节点)。请注意,如果处理不当,这个方法可能会像 Node.removeChild 一样导致内存泄漏。

let list = document.querySelector('ul');let oldItem = list.querySelector('li');let newItem = document.createElement('li');newItem.innerHTML = 'Las Vegas';let replacedItem = list.replaceChild(newItem, oldItem);复制代码

Node.cloneNode

这个方法用于用于创建调用此方法的给定节点的副本。当你需要在页面上创建一个与现有元素相同的新元素时非常有用。它接受一个可选的 boolean 类型的参数,该参数用于表示是否对子节点进行深度克隆。

let list = document.querySelector('ul');let clone = list.cloneNode();复制代码

Element.getAttribute / Element.setAttribute

Element.getAttribute 该方法返回元素上给定属性的值,与之对应的,Element.setAttribute 方法用于设置给定元素上属性的值。

let list = document.querySelector('ul');list.setAttribute('id', 'my-list');let id = list.getAttribute('id');console.log(id); // 输出 my-list复制代码

Element.hasAttribute / Element.removeAttribute

Element.hasAttribute 方法用于检查给定元素是否具有指定的属性。返回值是 boolean 类型。同时,通过调用 Element.removeAttribute,我们可以从元素中删除给定名称的属性。

let list = document.querySelector('ul');if (list.hasAttribute('id')) {    console.log('list has an id');    list.removeAttribute('id');};复制代码

Element.insertAdjacentHTML

该方法将制定的文本解析为 HTML,并将 HTML 元素节点插入到 DOM 树中的给定位置。它不会破坏要插入的新 HTML 元素中的现有节点。插入的位置可以是以下字符串之一:

  1. beforebegin
  2. afterbegin
  3. beforeend
  4. afterend

Hello World

复制代码

例:

var list = document.querySelector('ul');list.insertAdjacentHTML('afterbegin', '
  • First
  • ');复制代码

    请注意,使用此方法的时候,我们需要适当的格式化给定的 HTML 元素。

    结论和了解更多

    我希望这篇文章对你有帮助,它会有助于你理解 DOM。正确处理 DOM 树是非常重要的,如果不正确地使用它可能会给你带来一些严重的后果。确保始终进行内存清理并适当格式化 HTML/XML 字符串。

    如果需要了解更多,请查看官方 。

    如果发现译文存在错误或其他需要改进的地方,欢迎到 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


    是一个翻译优质互联网技术文章的社区,文章来源为 上的英文分享文章。内容覆盖 、、、、、、、等领域,想要查看更多优质译文请持续关注 、、。

    转载于:https://juejin.im/post/5cf65369f265da1bc94edad8

    你可能感兴趣的文章
    ES6里关于类的拓展(一)
    查看>>
    零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
    查看>>
    Format Conditions按条件显示表格记录
    查看>>
    RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
    查看>>
    mysql优化----explain的列分析
    查看>>
    Python正则表达式
    查看>>
    Java中CAS详解
    查看>>
    Spring Boot Unregistering JMX-exposed beans on shutdown
    查看>>
    命令行man的帮助手册
    查看>>
    Ubuntu 16.04下为Android编译OpenCV 3.2.0 Manager
    查看>>
    poi 导入导出的api说明(大全)
    查看>>
    Fix-Mapped Addresses
    查看>>
    fmt标签如何计算两个日期之间相隔的天数
    查看>>
    Spark核心技术原理透视一(Spark运行原理)
    查看>>
    《Gradle权威指南》--Gradle任务
    查看>>
    IntelliJ IDEA创建文件时自动填入作者时间 定制格式
    查看>>
    Android app启动activity并调用onCreate()方法时都默默地干了什么?
    查看>>
    远程监视jboss应用java内存的配置
    查看>>
    前端如何接收 websocket 发送过来的实时数据
    查看>>
    JavaWeb下载文件response
    查看>>