[译]13 种有用的 JavaScript DOM 操作
栏目: JavaScript · 发布时间: 5年前
内容简介: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
这个方法在指定父节点内的某个子节点之前插入给定节点(并返回插入的节点)。下面是使用该方法的一个伪代码:
- Paris
- London
- New York
↓
Node.insertBefore(San Francisco, Paris)
↓
- San Francisco
- Paris
- London
- 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 链接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为掘金 上的英文分享文章。内容覆盖 Android 、 iOS 、 前端 、 后端 、 区块链 、 产品 、 设计 、 人工智能 等领域,想要查看更多优质译文请持续关注 掘金翻译计划 、官方微博、 知乎专栏 。
以上所述就是小编给大家介绍的《[译]13 种有用的 JavaScript DOM 操作》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 使用 Clojure 编写 OpenWhisk 操作,第 2 部分: 将 Clojure OpenWhisk 操作连接成有用的序列
- 看的书多,就有用吗?
- 如何绘制有用的技术架构图
- Laravel10个有用的用法
- [译] 50+ 有用的 DevOps 工具(二)
- [译] 50+ 有用的 DevOps 工具(三)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
用户力:需求驱动的产品、运营和商业模式
郝志中 / 机械工业出版社 / 2015-11-1 / 59.00
《用户力:需求驱动的产品、运营和商业模式》从用户需求角度深刻阐释了互联网产品设计、网络运营、商业模式构建的本质与方法论! 本书以“用户需求”为主线,先用逆向思维进行倒推,从本质的角度分析了用户的需求是如何驱动企业的产品设计、网络运营和商业模式构建的,将这三个重要部分进行了系统性和结构化的串联,然后用顺向思维进行铺陈,从实践和方法论的角度总结了企业究竟应该如围绕用户的真实需求来进行产品设计、网......一起来看看 《用户力:需求驱动的产品、运营和商业模式》 这本书的介绍吧!