[译]13 种有用的 JavaScript DOM 操做

介绍

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

document.querySelector / document.querySelectorAll

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

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

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

document.createElement

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

Node.appendChild

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

让咱们看看这两种方法的做用:ios

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

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

  1. Paris
  2. London
  3. New York

github

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 API
let 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
<!-- beforebegin -->
<div>
  <!-- afterbegin -->
  <p>Hello World</p>
  <!-- beforeend -->
</div>
<!-- afterend -->
复制代码

例:

var list = document.querySelector('ul');
list.insertAdjacentHTML('afterbegin', '<li id="first-item">First</li>');
复制代码

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

结论和了解更多

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

若是须要了解更多,请查看官方 w3c 页面

若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索