能否使用JavaScript重写已被移除的person-infos容器内元素?
问题解答:移除容器后能否重写原内部元素?
当然可以,但能不能操作原内部元素,核心看你有没有提前保留这些元素的引用:
情况1:已保留内部元素引用(你的代码里已经做到了)
你代码里的nomeCandidato、partidoCandidato还有elementsInfo,都是原容器内部元素的引用。哪怕父容器person-infos被移除,这些元素只是脱离了DOM树,并没有被销毁——它们还存在内存里,你完全可以修改它们的内容,之后再重新构建容器插回DOM。
举个实际操作的例子:
const infos = document.querySelector(".person-infos") const nomeCandidato = document.querySelector(".name") const partidoCandidato = document.querySelector(".age") const photo = document.querySelector(".photo") // 先移除原容器 infos.remove() // 重写原内部元素的内容 nomeCandidato.textContent = "张三" partidoCandidato.textContent = "28岁" photo.src = "avatar.jpg" // 重新创建person-infos容器,把修改后的元素加回去,再插回页面 const newInfosContainer = document.createElement("div") newInfosContainer.classList.add("person-infos") newInfosContainer.append(photo, nomeCandidato, partidoCandidato) document.body.appendChild(newInfosContainer)
情况2:没保留内部元素引用
如果移除容器前没存任何内部元素的引用,那原内部元素会因为没有被JS引用而被浏览器垃圾回收,这时就没法直接找回原元素了,只能重新创建一套新的元素结构来替代。
比如这种场景的操作:
// 直接移除容器,没存内部元素引用 document.querySelector(".person-infos").remove() // 重新创建整个容器和内部元素 const newInfosContainer = document.createElement("div") newInfosContainer.classList.add("person-infos") newInfosContainer.innerHTML = ` <img class="photo" src="avatar.jpg"> <div class="name">张三</div> <div class="age">28岁</div> ` document.body.appendChild(newInfosContainer)
简单总结:DOM元素被移除后,只要还有JS变量拿着它的引用,就能随便改;没引用的话,就只能重新造。
内容的提问来源于stack exchange,提问作者Paulo1706
相关产品推荐
相关产品推荐

