我在一个类中有一堆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中返回一个节点。除了没有parentNode之外,它具有所有正确的属性。
FIX - 不回答:
我刚使用xpath而不是我的引用或getElementById()。
答案 0 :(得分:3)
使用referenceexlicity:
$current_node = &$this->resource_nodes[$id]['node'];
修改$current_node