首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么innerHTML不能保留以前的状态(应该使用什么来代替?)

innerHTML属性是用来获取或设置指定元素的HTML内容的。当我们使用innerHTML来修改元素的内容时,它会完全替换原有的内容,因此无法保留以前的状态。

为了代替innerHTML并保留以前的状态,我们可以使用DOM操作的appendChild()、insertBefore()或者insertAdjacentHTML()等方法来实现。这些方法可以在指定元素内部追加或插入新的HTML内容,而不会完全替换原有的内容。

以JavaScript为例,下面是使用appendChild()方法来代替innerHTML的示例代码:

代码语言:txt
复制
// 获取目标元素
var element = document.getElementById("targetElement");

// 创建新的HTML内容
var newContent = document.createElement("div");
newContent.innerHTML = "新的内容";

// 在目标元素内部追加新的内容
element.appendChild(newContent);

此代码将在targetElement元素的末尾添加一个新的<div>元素,并将其内容设置为"新的内容",而不会替换原有的内容。

通过使用这些方法,我们可以在不丢失以前状态的情况下更新HTML内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于“先扛住,再优化”

不断的跟我说,“先用以前的方式实现,以前的没问题,先把这个版本发了,再安排个时间优化”。其实以前估计也是用这个方式实现的,只不过刚好没有触发这个bug。...最后,我直接跟他要了实现的脚本,自己定位,最终确定了是由于脚本里用了填充模板再innerHTML进页面的方式去实现,而innerHTML 进去的内容带背景引起的图片重复拉取。...所以解决方法就是不使用innerHTML,很快就解决了。前后也不就是花了我半小时不到,为什么开发的同学就不能定下心找原因呢?...我所理解的“先扛住”,并不是简单的先把东西搞出来就算了,而是在当前情况下已经做了80%左右的优化,一些很花时间的优化先保留接口,后期到一定阶段“再优化”。...任何一种技术、思想,都是有它适用的环境、条件的,如果不做分析,一味的接受、使用,有时并不会带来正面的效果。

28640

Web APIs第一天

如果不能可以怎么做到修改? 不可以, 只能通过遍历的方式一次给里面的元素做修改 2....= '您好啊' document.write() 方法 只能追加到body中 元素.innerText 属性 只识别内容,不能解析标签 元素.innerHTML 属性 能够解析标签...操作类名(className) 操作CSS 如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式 由于class是关键字, 所以使用className去代替 className...是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名 可以同时修改多个样式 直接使用 className 赋值会覆盖以前的类名 // 使用ClassName修改样式 可修改多个样式 但会覆盖以前类名...是追加和删除不影响以前类名 // 使用ClaaList修改样式 修改样式方便 追加删除不影响以前类名 let num1 = document.querySelector('.one1') // add

1.8K30
  • 响应式、模版克隆、Proxy 代理。。。JavaScript 框架工作原理你还了解多少?

    使用虚拟 DOM 可以减轻“一切从零开始”策略的一些成本,但并不能完全解决问题。要求开发人员编写正确的备忘录代码是一场失败的战斗(有关解决此问题的尝试,请参阅 React Forget)。...此外,每次更新都会破坏 DOM,这会重置状态,例如 的值等。 注意:使用 innerHTML 也会涉及安全问题,但在本文中,我们假设 HTML 内容是可信的。...为什么要刷新更新?主要是因为我们不想进行过多的计算。如果每当 a 和 b 都发生变化时就更新,那么我们就会无用地计算两次总和。通过将刷新合并到一个微任务中,我们可以提高效率。...(稍后我们将看到为什么我们需要编译器)。 我们将重复使用之前的 state 对象,这次将使用 color 和 text 属性。...当我们将该 state 传递给 render 时,它应该返回应用了该状态的 DOM 树: Blue!

    20210

    自己写的面试题,自己想的答案

    3.考点-预解析 根据以下代码,写出结果 这道题我印象很深刻,因为是我在一年多以前,在Q群看到有人说直自己各种精通的时候,我就出这道题来提问,一抓一个准,至今那些各种精通的人,没一个回答出来的。...这道题,有几个人还是从vue的角度来解决问题(v-for,data),虽然这样不能说错,但是我题目没提及vue的任何东西。考点就是利用innerHTML或者文档碎片的形式。...所以理想的解决方案应该是这个。...1.如果设计中使用了非标准的字体,你该如何去实现? 图片,字体图标代替,如果是比较小的英文字体可以使用css3的@font-face。...用法讲解 4.Div+css排版的时候,从页面渲染和代码可读性的角度,应该注意些什么?

    69220

    函数式编程,真香

    总之,当我们在设计应用程序的时候,我们应该考虑是否遵守了以下的设计原则。 可扩展性--我是否需要不断地重构代码来支持额外的功能? 易模块化--如果我更改了一个文件,另一个文件是否会受到影响?...document.querySelector('#msg').innerHTML = 'Hello World' 这个程序很简单,但是所有代码都是死的,不能重用,如果想改变消息的格式、...和 echo 都是函数,addToDom 很明显也能看出它是函数,那么我们为什么要写成这样呢?...我们所熟知的 SQL 语句就是一种很典型的声明式编程,它由一个个描述查询结果应该是什么样的断言组成,对数据检索的内部机制进行了抽象。 我们再来看一组代码再来对比一下命令式编程和声明式编程。...而声明式是将程序的描述与求值分离开来。它关注如何用各种表达式来描述程序逻辑,而不一定要指明其控制流或状态关系的变化。 为什么我们要去掉代码循环呢?

    82620

    社招前端一面react面试题汇总

    (在构造函数中)调用 super(props) 的目的是什么在 super() 被调用之前,子类是不能使用 this 的,在 ES2015 中,子类必须在 constructor 中调用 super()...它不但没有问题,而且如果根据以前的状态( state)以及属性来修改当前状态,推荐使用这种写法。...就去渲染对应的组件,若没有定义组件 则报错当根据数据遍历生成的标签,一定要给标签设置单独的key 否则会报错hooks 为什么不能放在条件判断里以 setState 为例,在 react 内部,每个组件...为什么?Ajax请求应该写在组件创建期的第五个阶段,即 componentDidMount生命周期方法中。原因如下。在创建期的其他阶段,组件尚未渲染完成。...shouldComponentUpdate 应该返回一个布尔值来决定组件是否要重新渲染componentWillUpdate -- 很少使用。

    3K20

    2024全网最全面及最新且最为详细的网络安全技巧 七之 XSS漏洞典例分析POC以及 如何防御和修复(4)———— 作者:LJS

    ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix。...很多同学又有疑问了,为什么html的命令空间下,style就只有文本内容,而svg命名空间下,style却可以解析 这里又需要增加基础且重要的知识。...看起来平平无奇,但是它可以在过滤代码执行以前,提前执行恶意代码。那为什么这个payload可以,上面img标签的payload却不能执行代码?...清楚调用流程以后,就可以思考,为什么无法触发这个事件呢?最大的可能性,就是在任务交给TaskRunner以后又被取消了。...那么回过头来想一下,为什么测试Tui的时候直接成功,却在修改前的挑战代码中失败?看一下Tui的处理这部分内容的相关代码。

    9410

    关于Java中Stack类的使用

    标签(空格分隔): java - 为什么不用Stack类 《Java编程思想》第四版一书中明确不建议我们使用java.util.Stack类,一直保留只是为了兼容以前的版本,在17.13.3中提到了原因...PS:Stack是为了专门实现栈而创建的类,作者在文中也提到“竟然不是用Vector来构建Stack,而是继承Vector”,可见作者也认为额外的操作是使用Stack类所不能容忍的。...但这和建议使用LInkedList不能同一看待,因为一个是专用类,而另外一个是建议实现Stack的一种手段(不能因为可以实现Stack而不能有其他的操作,LinkedList毕竟不是为了Stack而生)...- 为什么不用Vector类 Vector由于是线程安全的,所以在单线程的时候效率会叫ArrayList更低。在Java 1.2 出现ArrayList之后基本上就使用起来代替Vector。...在多线程中ArrayList可以使用Collectiuons.synchronized方法来保证多线程环境下的安全使用。 在本书17.13.1中提到另一个原因就是又长又难记的方法名。

    1.5K90

    【最佳实践之性能篇】编码惯例与作用域意识

    这样一个全局对象可以扩展为命名空间的概念。命名空间涉及创建一个对象,然后通过这个对象来暴露能力。关于命名空间,最重要的是确定一个大家都同意的全局对象名称。这个名称要足够独特,不能与其他人的冲突。...但是,if语句在这里只是简单的检查了这个值是不是null。实际上,字符串、数值还是有很多其他类型都可以通过这里的检查,结果就会导致错误。 注意:类型检查要检查的是它的类型,而不是检查它不能是什么!。...比如: let url = window.location.href; let query = url.xxx; 只要对象属性的访问超过了1次,就应该这样做来提升性能。 2....(valuse[i]); }while( --i >= 0 );// 注意这里是 --i,而没有使用i++为什么,不懂的评论区评论 可以自行测试一下,博主自测使用后测试循环执行时间比...尽量使用 位操作运算符 在执行数学运算操作时,位操作一定比任何布尔值或数字计算更快。像求模、逻辑与AND、逻辑或OR都很适合使用位操作代替。甚至某些计算可以考虑使用位移操作符代替。 语句最少化 1.

    33220

    try catch引发的性能优化深度思考

    开始有点疑惑为什么 style.formatData 的值导致这个函数的运行效率差别如此之大。...,并且这是 JavaScript 语言的一种特殊情况,所以某些浏览器不能非常有效地处理它,并且在捕获异常的情况下,将捕获处理程序放在性能关键的循环中可能会导致性能问题,这是我们为什么上面会出现 Minor...从性能的角度来看,目前 V8 引擎确实在积极的通过 try catch 来优化这类代码片段,在以前浏览器版本中上面整个循环即使发生在 try catch 代码块内,它的速度也会变慢,因为以前浏览器版本会默认禁用...当我们预感代码片段有可能出错,更应该是集中注意力去处理 success 和 error 的场景,而非使用 try catch 来保护我们的代码,更多时候 try catch 反而会让我们忽略了代码存在的致命问题...if else 代替,在某些复杂不可测的代码中也应该减少 try catch(比如异步代码),我们看过很多 async 和 await 的示例代码都是结合 try catch 的,在很多性能场景下我认为它并不合理

    92620

    前端框架选型

    最高票回答是你应该使用jQuery插件,jQuery插件可以做任何事情。 历史总是在重演,以前是jQuery,现在可能是react或vue。不同的框架有不同的应用场景,杀鸡不要用牛刀。...框架决定了什么时候调用库,决定了什么时候要求代码去执行特定功能 ? 而实际上,一个库有时也可以称之为框架,而库里面集成的方法称之为库 框架和库的区别不由实际大小决定,而由思考角度来决定。...(模板集成) 5、Component(组件) 6、Routing(路由) 7、Architecture(架构) 【why】 为什么要使用外部的解决方案呢?...原理如下:将输入的字符串模板通过innerHTML转换为一个无状态DOM树,然后遍历该节点树,去抓取关键属性或语句,来进行相关的绑定,进而变成了有状态的DOM树,最终导致DOM树会与数据模型model进行绑定...这类模板的特点是修改数据时,会使有状态的DOM树实时更新,运行时性能更好,也会保留 DOM 中的已有事件 ?

    1.7K60

    React入门

    6.单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。...script> JSX语法(react使用jsx代替常规的javascript) 可以创建一个独立的js文件来使用,通过script标签来引入 使用多个标签,使用div包裹 支持表达式, js表达式可以直接被解析...不支持if else 可以使用三元表达式代替 相当于是vue中 的 v-if 直接解析数组 相当于是vue中的v-for...标签中注释使用花括号包裹,区别于原先的js注释 , 否则的话 , 注释会 直接解析成文本 推荐使用内联样式 直接进行样式的绑定 相当于是vue中的 v-bind 为什么使用jsx语法...元素用于描述你在页面上看到的内容 页面的基本渲染 元素的更新 在React中,元素是不能发生突变的,要进行元素的,一旦创建了元素,就不能修改其子元素或者是相关的属性 元素更新的措施是: 创建一个新的元素并使用

    90410

    新手学习 react 迷惑的点(一)

    为什么要用 className 而不用 class React 一开始的理念是想与浏览器的 DOM API 保持一直而不是 HTML,因为 JSX 是 JS 的扩展,而不是用来代替 HTML 的,这样会和元素的创建更为接近... "hello" 浏览器问题,ES5 之前,在对象中不能使用保留字。...jsx用className而不是class 为什么属性要用小驼峰 因为 JSX 语法上更接近 JavaScript 而不是 HTML,所以 React DOM 使用 camelCase(小驼峰命名)来定义属性的名称...来自 JSX 简介 为什么 constructor 里要调用 super 和传递 props 这是官网的一段代码,具体见:状态(State) 和 生命周期 class Clock extends React.Component...不知道你有没有疑惑过为什么要调用 super 和传递 props,接下来我们来解开谜题吧。

    71030

    大道至简--API设计的美学

    好的 API 不但利于使用者理解,开发时也会事半功倍,后期维护更是顺风顺水。至于怎么设计API,今天就提下我自己的一些建议。如果大家有什么好的想法,欢迎指点。...一个弹窗这样的会话消息,建议使用message这个字样。notice应该像‘公告,告示,声明’之类的情况使用。...,type这个参数,我想保留默认值,偷懒不传。...现在API改了,解决的方案有两个,要么把整个项目使用的这个API的方式,都改成第二种的传参方式,要么就是对接口进行向下兼容,兼容以前的方案。...6.简单 这一步可以说是API设计最高级的一步,也是最难开发的一步,这就是为什么这篇文章会带有‘大道至简’的字样,即使API的实现很难,但使用起来简单感觉就是高级的API。

    54630

    AngularDart4.0 指南- 模板语法一 顶

    请遵循以下准则: 没有明显的副作用 快速执行 简单 幂等性 这些指导方针的例外情况应该是在你理解的情况下。 没有明显的副作用 模板表达式不应该更改目标属性的值以外的任何应用程序状态。...该属性(Attributes)的值是无关紧要的,这就是为什么您不能通过编写 Still Disabled 来启用按钮的原因。...您不能使用属性绑定将值从目标元素中拉出。 您不能绑定到目标元素的属性来读取它。 你只能设置它。 同样,您不能在目标元素上使用属性绑定来调用方法。...本指南反复强调,使用属性(property)绑定设置元素属性(property)始终优先于使用字符串设置属性(attribute)。 Angular为什么提供属性(attribute)绑定?...以前缀attr开头,后跟一个点(.)和属性名称代替括号之间的元素属性。然后使用解析为字符串的表达式来设置属性值。

    5.2K10

    2024全网最全面及最新且最为详细的网络安全技巧 七之 XSS漏洞典例分析EXP以及 如何防御和修复(1)———— 作者:LJS

    = smith 我们先分析代码,正则表达式过滤了什么,()`\并且是全局过滤,这样一来,不能使用()就对弹窗很不利,那么我首先想到的办法就是编码,利用编码绕过 那么我第一次的payload...-> 但是这里我们并不能直接传入 HTML 编码绕过,得需要加一个 img 标签利用其属性进行绕过,为什么呢?...可以看到我们在使用了为什么呢?我们可以输出第一步的template.innerHTML看看 我们可以发现在第一步渲染的时候,传入的为什么呢?...并不能执行(没有unsafe-inline),于是我们可以用不完整的来将数据带出 exp http://127.0.0.1/csp.php?

    19910

    Vue 2x 中使用 render 和 jsx 的最佳实践 (2)

    因为根据VR的render渲染机制,如果使用箭头函数,那么每当组件的state发生改变,推动render渲染执行的时候,如果存在箭头函数,每次浏览器都会分配新的内存和额外的开销来执行事件的绑定,组件绑定的层级越深...JSX -> VR DOM -> DOM 为什么要用VR DOM 很难跟踪状态发生的改变:原有的开发模式,我们很难跟踪到状态发生的改变,不方便针对我们应用程序进行调试; 操作真实DOM性能较低:...,所以在开发中应该避免频繁的DOM操作 不是用了VR DOM性能就一定会变好 React 从来没有说过 “React 比原生操作 DOM 快”。...真正的问题是在 “全部重新渲染” 的思维模式下,即使只有一行数据变了,它也需要重置整个 innerHTML,这时候显然就有大量的浪费。 我们可以比较一下 innerHTML vs. ...这才是为什么要有 Virtual DOM: 它保证了: 不管你的数据变化多少,每次重绘的性能都可以接受; 你依然可以用类似 innerHTML 的思路去写你的应用。

    82620

    2024全网最全面及最新且最为详细的网络安全技巧 七之 XSS漏洞典例分析POC以及 如何防御和修复(5)———— 作者:LJS

    这里处理的比较粗暴,而且也无法使用HTML编码来绕过关键字——原因是,在字符串赋值给innerHTML的时候,HTML属性中的编码已经被解码了,所以在属性检查的时候看到的是解码后的内容。...但与a标签的href属性不同的是,use href不能使用JavaScript伪协议,但可以使用data:协议。...那么想要找到这样一个Payload,它需要满足下面两个条件: 在代码被放进innerHTML的时候会被触发 事件触发的时间需要在被移除以前 第一个条件很好满足,比如最常用的XSS Payload 的差异,都可能被存储并提供给其他用户。理论上,站点可以使用“Vary”响应头来指定请求头中哪些部分应该作为缓存键。...所以污染了document.notify就相当于污染了将要传递的实参notify,这也就是为什么需要之前的dom-clobbing。

    10910
    领券