PHP DOMDocument调用replaceChild替换节点后原节点变量仍返回旧值问题
问题原因分析
- 核心原因是PHP的
DOMNode对象为引用类型,你最初获取的$contentEditable变量存储的是原始旧节点的内存引用,和后续插入的新克隆节点是完全独立的两个对象。 - 调用
replaceChild方法的操作本质是:把旧节点从当前DOM树中移除,再把新的克隆节点挂载到旧节点原本的父节点下,这个操作不会修改$contentEditable变量本身的指向,它仍然指向已经脱离DOM树的旧节点,所以读取它的nodeValue自然还是旧值。 saveHTMLFile写入文件是基于当前最新的DOM树状态(已经插入新节点),所以文件内容是更新后的,和已脱离DOM树的旧节点变量的状态无关。- 如果需要获取更新后的节点内容,应该在
replaceChild操作完成后,重新通过getElementById('editable')查询DOM树拿到新节点的引用,再读取对应的属性即可。
内容的提问来源于stack exchange,提问作者Naeco
相关产品推荐
相关产品推荐

