DOM-4 【utils/待讲评】节点创建删除、元素属性设置获取、节点属性

讲评

节点创建

  • Document.prototype ← document.createElement('div')
  • document.createTextNode('xxx') // 创建文本节点
  • document.createComment('xxx') // 创建注释节点

增加/剪切子节点

  • Node.prototype ← node.appendChild(node)
  • 总是在父元素的最后增加(类似push)
  • 同时也能剪切(对于存在的节点/DOM元素),可用于移动位置,绝不能写字符串

插入insertBefore

  • Node.prototype
  • c.insertBefore(a, b) 在父级c节点下的子节点b前插入a节点,新的在前
  • 最后插的总是紧靠着旧的节点
<body><div><p class="firstP">666</p></div><script>var div = document.getElementsByTagName('div')[0]var fP = document.getElementsByClassName('firstP')[0]var oP = document.createElement('p')oP.innerHTML = '222'div.insertBefore(oP, fP)var sP = document.createElement('p')sP.innerHTML = '333'div.insertBefore(sP, fP)</script>
</body>

在这里插入图片描述

删除节点 removeChild

  • Node.prototype
  • 父节点.removeChild(子节点) // 返回被删除的节点
  • 元素是由构造函数实例化创建的,dom对象存到了内存中,删除节点并没有释放内存

删除释放节点remove

  • 节点自身.remove()
  • 返回undefined
  • 内存也释放了

节点替换

  • 父节点.replaceChild(新, 旧)

innerHTML innerText

原型属性
Element.prototypeinnerHTML
HTMLElement.prototypeinnerHTML innerText
  • innerHTML可读写
  • += 追加赋值
  • 可写文本 or HTML字符串
  • innerText会过滤标签
  • innerText赋值为标签,也会将标签转换为字符实体,依然是字符
  • innerText在老版本的火狐对应textConent,但老版本的IE不支持textContent

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

元素节点方法

  • div.setAttribute('id','box')
  • div.getAttribute('class')

自定义属性

  • HTML5中增加data-*属性
  • 自定义的属性通过节点.dataset来管理
  • dataset在移动端兼容,PC端IE9及以下不兼容(无此属性)
    在这里插入图片描述
    在这里插入图片描述

创建文档碎片

  • document.createDocumentFragment()
  • 给浏览器渲染引擎减负,减少计算位置/回流
  • 当oDiv还没有在节点树里的时候append,但结果多了一个div节点
  • 而文档碎片是节点,但不在dom树上,存在内存中,nodeType12,不会引起页面的回流
    在这里插入图片描述
    在这里插入图片描述
  • 字符串的性能更好
    在这里插入图片描述

练习

  1. 原型上编程 hasChildren 判断父元素有没有子元素节点
Element.prototype.hasChildren = function () {var arr = this.childNodesif (arr.length === 0) {return false} else {for (var i = 0; i < arr.length; i++) {if (arr[i].nodeType === 1) {return true}}return false}
}
var div = document.getElementsByTagName('div')[0]
var h1 = document.getElementsByTagName('h1')[0]
console.log(div.hasChildren())
console.log(h1.hasChildren())
  1. 原型上编程 寻找兄弟元素节点 参数为正找之后第n个,参数为负找之前第n个,参数0返回自己
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div><h1></h1><p></p><a href=""></a><span></span></div><script>Element.prototype.findSibling = function () {var index = arguments[0] || 0if (!index) {return this} else {var times = Math.abs(index)var node = thisfor (var i = 0; i < times; i++) {node = findFn(node, index)}return node}}function findFn(node, index) {if (index > 0) {return node.nextElementSibling} else {return node.previousElementSibling}}var h1 = document.getElementsByTagName('h1')[0]var found = h1.findSibling(3)var a = document.getElementsByTagName('a')[0]var found2 = a.findSibling(-2)console.log(found)console.log(found2)</script>
</body></html>
  1. 用js创建文档碎片
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div id="box"></div><script>var div = document.getElementsByTagName('div')[0],oUl = document.createElement('ul');oUl.className = 'list'var oDivFragment = document.createDocumentFragment('div')for (var i = 0; i < 5; i++) {var oLi = document.createElement('li')oLi.className = 'list-item'oLi.innerText = i + 1oDivFragment.appendChild(oLi)}oUl.appendChild(oDivFragment)div.appendChild(oUl)</script>
</body></html>

在这里插入图片描述

  1. 遍历一个父级元素下面所有的子元素节点
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div class="grandfather"><p></p><div><h1></h1><span></span><div><a href=""></a><h2></h2></div></div></div><script>Element.prototype.getAllChildren = function () {var arr = this.childNodesvar eleArr = []getChildren(arr, eleArr)return eleArr}function getChildren(arr, eleArr) {for (var i = 0; i < arr.length; i++) {if (arr[i].nodeType === 1) {eleArr.push(arr[i])if (arr[i].hasChildNodes()) {getChildren(arr[i].childNodes, eleArr)}}}}var oGF = document.getElementsByClassName('grandfather')[0]var children = oGF.getAllChildren()console.log(children)</script>
</body></html>
  1. 原型上封装insertAfter 用insertBefore实现
    在这里插入图片描述

  2. 子元素逆序

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div class="grandfather"><h1>1</h1><span>2</span><div>3</div><p>4</p></div><script>Element.prototype.myReverse = function () {var arr = this.childNodes,children = []for (var i = 0; i < arr.length; i++) {var ele = arr[i]if (ele.nodeType === 1) {children.push(ele)}}for (var j = children.length - 1; j >= 0; j--) {var e = children[j]this.appendChild(e)}}var oGF = document.getElementsByClassName('grandfather')[0]</script>
</body></html>

18-1 innerHTML

  • Element.prototype上的属性
  • 对于特殊符号,获取到的是字符实体
  • document.body.innerHTML / document.documentElement.innerHTML(不能直接在document上用此属性)
  • 会删除元素内原有的内容
    在这里插入图片描述
  • outerHTML - 替换掉包含父元素的所有内容
  • 获取dom元素字符串,并用pre(将字符实体转成符号)
    在这里插入图片描述
  • 设置innerHTML时:
  1. 将字符串解析为HTML文档
  2. 用documentFragment将这个文档结构变成DOM节点
  3. 原本父节点上的所有内容都会被替换成这个节点
  4. 性能问题,慢
  5. 安全问题:HTML5和现代的新的浏览器会组织通过innerHTML嵌入脚本的程序执行

在这里插入图片描述

  • 插入纯文本时,使用Node.textContent更好,只会将文本插入到元素内部去,不会解析为HTML文档
  • 追innerHTML会破坏原先的DOM应用
    在这里插入图片描述

innerText

  • 纯文本设置时,和textContent效果相同(尽量使用textContent)

  • innerText会忽略非标签内容(比如style、换行)
    在这里插入图片描述

  • 推荐做法,用外层盒子包裹
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript --- 事件对象和事件类型

// 无论程序使用"DOM0级"规范还是"DOM2级"规范,都会在局部产生一个event对象, // 将其打印出来研究: <div id"divBtn"><button id"rawBtn" >Click Me!</button></div> <script>const divBtn document…

关于APP更新,两包共存的解决方案

大多数是由于包名不一致导致的&#xff0c;一定要注意包名一致、不然手机会认为是两个app&#xff0c;导致两个包共存 查看包名的方法 1、hbuilder打包时会有提示 2、手机打开设置->应用->正在运行->对应app即可查看 转载于:https://www.cnblogs.com/zz-0128/p/827969…

DOM-5【兼容】滚动距离与高度、兼容模式、可视尺寸

查看滚动条的距离 方法版本window.pageXOffset / pageYOffsetIE9/IE8及以下不支持(常规)document.body.scrollLeft/scrollTopIE9/IE8及以下(部分支持&#xff0c;具体看模式)document.documentElement.scrollLeft/scrollTopIE9/IE8及以下(部分支持&#xff0c;具体看模式)wind…

DOM-6 【兼容】读写样式属性、操作伪元素、运动元素初探

规范 <style type"text/css"></style><script type"text/javascript"></script>读写样式属性 .style是访问不到css样式表的&#xff0c;只能访问到行内/内联的属性&#xff0c;当未设置行内属性时&#xff0c;结果为空字符串 设…

RGBD论文阅读笔记

Single-Image Depth Perception in the Wild 简要记载一下对于利用RGB图像depth图像得到segmentation的论文。 论文名称&#xff1a;Cascaded Feature Network for Semantic Segmentation of RGB-D Images 论文出处 ICCV 2017 Lin 模型结构 数据集 NYUDv2 SUN-RGBD 性能分析 总…

vue组件调用(全局调用和局部调用)

当用vue-cli创建一个项目后, 创建项目的方法: https://www.cnblogs.com/fps2tao/p/9376847.html 编写了组件怎么,在其他组件中调用了? 组件listBox: 路径 src/components/listBox.vue <template><div class"listBox">listBox222</div> </templ…

DOM-7 【兼容】事件处理函数、冒泡捕获、阻止冒泡默认事件

事件处理函数 绑定事件 绑定事件的处理函数&#xff08;事件本身是存在的&#xff0c;绑定的是相应的反馈&#xff09;事件 事件的反馈 前端交互 &#xff08;前端核心&#xff09; 绑定事件的方式 1. 句柄绑定 默认&#xff08;只能&#xff09;是事件冒泡这种事件流为…

DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托

事件流 1. 含义 描述从页面中接收事件的顺序 2. 分类 IE提出的 事件冒泡流 Event BubblingNetscape提出的 事件捕获流 Event Capturing 3. 阶段 事件捕获阶段 处于目标阶段 事件冒泡阶段 事件捕获先于事件冒泡执行 dom dom0&#xff1a;定义句柄方式&#xff0c;兼…

IIS6.0,Apache低版本,PHP CGI 解析漏洞

IIS6.0解析漏洞 在IIS6.0下存在这样的文件“名字.asp;名字.jpg” 代表了jpg文件可以以asp脚本类型的文件执行。 根据这个解析漏洞我们可以上传这种名字类型的图片&#xff0c;比如 1.asp;xxx.jpg 他会忽略;后边的内容&#xff0c;所以文件相当于1.asp asp一句话木马 <%eval …

UVA 3485 Bridge

题目大意 你的任务是修建一座大桥。桥上等距地摆放着若干个塔&#xff0c;塔高为H&#xff0c;宽度忽略不计。相邻两座塔之间的距离不能超过D。塔之间的绳索形成全等的对称抛物线。桥长度为B&#xff0c;绳索总长为L&#xff0c;如下图所示求建最少的塔时绳索的最下端离地的高度…

ES5-拓展 this指向的总结

每个函数在执行时都有自己的this指向 1. 默认绑定规则&#xff1a; 全局中&#xff0c;this指向window this window函数的独立调用&#xff0c;this默认指向window &#xff08;不要把独立调用理解成window调用&#xff09; // 函数在全局中调用&#xff0c;也就是被window调…

国内初创企业选择云计算服务器价格对比

假设我们是一家初创企业&#xff0c;现在要选择第一台服务器。业务还未确定&#xff0c;只知道是互联网业务 要求&#xff1a; 至少2核&#xff0c;否则多线程的软件都跑不了至少4G内存&#xff0c;这样可以运行数据库或者elasticsearch这种比较吃内存的东西。或者说&#xff0…

ES5-拓展 箭头函数的this、this的优先级

让内部函数的this指向和父函数的this&#xff0c;可以显示改变this指向&#xff0c;也可以使用箭头函数 箭头代替了function关键字 箭头函数内部没有this指向&#xff0c;箭头函数的this是稳定引用父作用域的。因为它的存在就是要稳定this指向。 适用于普通函数的所有绑定规则…

java 实现压缩单个文件

先来实现一个简单的单文件压缩&#xff0c;主要是为了解一下压缩需要使用到的流。。 效果&#xff1a; 说明&#xff1a;压缩实现使用ZipOutputStream 代码&#xff1a; package com.gx.compress;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im…

jekins构建触发器详解

jenkins版本&#xff1a;2.89.2 1、触发远程构建 (例如,使用脚本)&#xff1a;通过一个网址的访问来触发构建&#xff0c;这样就不需要登录jenkins系统也能触发构建了。 示例地址&#xff1a; http://localhost:8848/job/FlashRegistration/build??token口令&cause书写构…

ES5-拓展 隐式数据类型转换

Boolean转换原则&#xff1a;非假即真 6种虚值 原始值转换为原始值 对象转换为原始值 Date()和new Date() new Date可以不写括号(new方式返回的一定是对象)&#xff0c;返回Date对象Date()返回函数执行&#xff0c;返回时间字符串 引用值转原始值 先找valueOf方法(一般…

Swagger的简单入门【转载】

一、Swagger简介 上一篇文章中我们介绍了Spring Boot对Restful的支持&#xff0c;这篇文章我们继续讨论这个话题&#xff0c;不过&#xff0c;我们这里不再讨论Restful API如何实现&#xff0c;而是讨论Restful API文档的维护问题。 在日常的工作中&#xff0c;我们往往需要给前…

visual studio code搭建本地服务器(node.js+express)

一、安装node.js&#xff08;常规软件安装流程&#xff0c;比较简单&#xff0c;不用赘述&#xff09; 二、安装express框架 1. 打开Windows命令提示符&#xff0c;输入&#xff1a; npm install express -g&#xff0c;等待&#xff0c;安装好如下所示&#xff1a; npm instal…

chrome调试

技术拓展直播课8 按chrome的官方文档 长按刷新 清除缓存&#xff08;不一定好使&#xff09; Ctrl f 查找类 console控制台见b站 bilibili source面板直接打断点 效果和debugger一样 单步调试 进入到函数的下一步 网速 no throttling 是否需要过滤 domcontentloaded d…

61-1 认识webpack

认识webpack 面向过程开发的不便引入外部js执行顺序面向对象开发 加载多个文件耗时更多 增加了http请求 引入过多js变量来源不明 优化 使用前先import 但使用import语法需要借助工具webpack翻译为浏览器可以解析的语法安装node自动携带npmwebpack若没有全局安装 需要使用npx…