我在一个类中有一堆 dom 操作函数。其中一个函数将唯一的 ID 分配给特定的节点。
$resource_info_node->setAttribute('id', 'resource_'.$this->ids);
$details['id'] = 'resource_'.$this->ids;
$details['node'] = $resource_info_node;
$this->resource_nodes['resource_'.$this->ids] = $details;
$this->ids += 1;
稍后我想查找并修改这些节点。我努力了 :
$current_node = $this->resource_nodes[$id]['node'];
当我 print_r() 我发现这个节点是原始节点的副本。它具有原始节点的属性,但不是 DOM 树的一部分。我得到相同的结果:
$this->content->getElementById($id);
我想我的整个事情都是基于将节点引用存储在数组中。我认为这是一件好事。即使没有,之后使用 getElementByID() 也应该返回 dom 中的节点。
我认为,在 PHP 中,所有对象都是通过引用传递的。包括 DOM 节点。关于如何测试实际情况的任何想法。
编辑 :
好吧,我用过:
$this->xpath->query('//*[@id]');
这返回了正确数量的带有 id 的项目。当我编辑它时,该节点不在 DOM 树中。
和
$current_node = &$this->resource_nodes[$id]['node'];
使用参考语法没有影响。
最奇怪的部分是 get elementById() 没有返回 dom 中的节点。除了没有父节点之外,它具有所有正确的属性。
修复 - 不回答:
我只是使用 xpath 而不是我的参考或 getElementById()。