3

我在一个类中有一堆 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()。

4

1 回答 1

3

明确使用参考:

$current_node = &$this->resource_nodes[$id]['node'];

并修改$current_node

于 2012-11-12T17:51:39.770 回答