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

栏目: JavaScript · 发布时间: 6年前

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

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 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 元素中的现有节点。插入的位置可以是以下字符串之一:

beforebegin
afterbegin
beforeend
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前端后端区块链产品设计人工智能 等领域,想要查看更多优质译文请持续关注 掘金翻译计划 、官方微博、 知乎专栏


以上所述就是小编给大家介绍的《[译]13 种有用的 JavaScript DOM 操作》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning jQuery

Learning jQuery

Jonathan Chaffer、Karl Swedberg / Packt Publishing / 2007-7-7 / GBP 24.99

jQuery is a powerful JavaScript library that can enhance your websites regardless of your background. In this book, creators of the popular jQuery learning resource, learningquery.com, share the......一起来看看 《Learning jQuery》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具