JavaScript - DOM 节点操作

DOM 操作

增删改查

一、查 - 获取节点

id 属性获取节点只返回一个唯一的节点,其他方法获取节点则是通过数组的形式返回满足指定条件的所有节点

var el1 = document.getElementById("id")                 // 根据 id 属性获取唯一节点
var els1 = document.getElementsByName("nameAttribute")  // 根据 name 属性获取节点,通过数组返回
var els2 = document.getElementsByTagName("tagName")     // 根据标签名获取节点,通过数组返回
var els3 = document.getElementsByClassName("className") // 根据类名获取节点,通过数组返回

根据已知节点的属性获取其关系节点:父节点、子节点、兄弟节点

var curNode = document.getElementById("curId")   // 通过以上四种方法之一获取当前节点
// 获取父节点
var parent1 = curNode.parentNode       // 获取父级节点
var parent2 = curNode.parentElement    // 获取父级元素节点
// 获取后代节点
var children1 = curNode.childNodes     // 获取所有子节点,包括文本节点
var children2 = curNode.children       // 仅获取子元素节点
var child1 = curNode.firstChild        // 第一个子节点
var child2 = curNode.firstElementChild // 第一个子元素节点
var child3 = curNode.lastChild         // 最后一个子节点
var child4 = curNode.lastElementChild  // 最后一个子元素节点
// 获取兄弟节点
var sibling1 = curNode.previousSibling        // 前一个兄弟节点
var sibling2 = curNode.previousElementSibling // 前一个兄弟元素节点
var sibling3 = curNode.nextSibling            // 后一个兄弟节点
var sibling4 = curNode.nextElementSibling     // 后一个兄弟元素节点

二、增 - 创建 & 复制节点:

// 创建新节点
var elementNode = document.createElement("tagName") //创建元素节点,tagName 为标签名
var textNode = document.createTextNode("text")      //创建文本元素,text 为文本字符串
var commentNode = document.createComment("comment") //创建注释节点,comment 为注释内容字符串
var docFragNode = document.createDocumentFragment() //创建文档碎片节点,初始化为空
// 复制节点
var newNode = document.createElement("tagName") // 创建或者获取需要复制的节点
var cloneNode = newNode.cloneNode(deep)         // deep 表示是否复制其后代,true 则复制

注意:docFragNode 是一个虚拟节点,当该节点插入页面中时,插入的不是 docFragNode 自身,而是它的所有子孙节点

三、改 - 添加 & 替换节点

// 添加节点
var parent = document.getElementById("parentId")  // 获取参照节点的父节点
var refNode = document.getElementById("refId")    // 获取参照节点
var newNode = document.createElement("tagName")   // 创建新节点
refNode.appendChild(newNode)           // 将新节点添加为参照节点的子节点,添加在队列的最后
refNode.append(...newNodes)            // 从参照节点尾部添加一系列新的子节点
refNode.prepend(...newNodes)           // 从参照节点头部添加一系列新的子节点
parent.insertBefore(newNode, refNode)  // 将新节点添加到参考节点的前面
refNode.before(...newNodes)            // 将一系列新节点添加到参考节点的前面
refNode.after(...newNodes)             // 将一系列新节点添加到参考节点的后面
// 替换节点
refNode.replaceWith(newNode)           // 用新节点替换参照节点
parent.replaceChild(newNode, refNode)  // 用新节点替换参照节点
parent.replaceChildren(...Nodes)       // 用新节点序列替换所有后代节点,传入为空则清空父节点的所有子节点

四、删 - 移除节点

var deleteNode = document.getElementById("delete")  // 获取需要删除的节点
deleteNode.remove()  // 移除节点
全部评论

相关推荐

已经入职数字马力4个月了,忍不住想和大家聊聊最真实的感受!🔥1️⃣ 岗位偏见?作为蚂蚁的子公司,很多人会担心“内包”身份会不会有岗位偏见。就我这几个月的体验来说,数字马力一直在快速扩招,面试流程也越来越规范(尤其是校招环节)。至于偏见问题,真的看部门和leader,很幸运我遇到的师兄和主管都特别nice,团队氛围很融洽。2️⃣ 待遇怎么样?试用期工资不打折!这点我真的吹爆💥!每天六点下班还有餐补,公积金按全额8%交(感动哭)……不过养老金也是实打实的8%,到手稍微心疼一下下😂3️⃣ 技术栈跟得上吗?技术栈多到学不完……而且我们有权限访问蚂蚁的知识库,自学能力强+愿意钻研的话,成长速度真的飞快!(当然,像我这种偶尔偷懒的也在慢慢进步中😝)4️⃣ 面试流程?一般是三面:两轮技术面(可能有线上笔试)+ 一轮HR面(含背调)。整体节奏比较顺畅,反馈也及时。5️⃣ 未来发展怎么看?老实说,数字马力不算头部大厂,不能指望它给简历镀金,但也绝不是那种会“减分”的外包。我更愿意把它看作一个扎实的中厂跳板,适合积累实战经验。6️⃣ 怎么投递?通过数字马力gzh,今天刚放出一批新HC!如果你正在看机会,不妨试试数字马力~之前面挂过也没关系,不妨再战一次,机会说不定就来了!🤝✅ 我的专属内推码:NTA6Nvs,可以直接帮大家推进流程。📮 有任何关于公司、岗位、面试的问题,也欢迎留言,我会尽量回复~(小声说:大环境不易,希望大家都能找到心仪的工作,也欢迎来找我内推呀!)
数字马力公司福利 22人发布
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务