在简单 html dom 输出上插入字符串

insert string on simple html dom output

我需要在 dom 元素中插入一个字符串,以便它们在调用 simple_html_dom::__tostring 时显示,但不会影响 simple_html_dom api。

所以,如果我有一个 simple_html_dom 节点,其中 $node->outertext 如下:

<div class="MyClass">
    <div itemprop="myVar">

    </div>
</div>

然后,我想在显示器上将$string='INSERTED STRING'分配给auto-insert。输出如下:

<div class="MyClass">
    INSERTED STRING
    <div itemprop="myVar">

    </div>
</div>

所以想法是,当使用 simple_html_dom api 与元素交互时,就好像没有插入 $string 一样。然后当html输出时,在开始(或结束)标签之后(或之前)插入$string

例如,$node->innertext = $string.$node->innertext 是不可接受的,因为它会影响解析,因为 $node 会在开头有一个新的 child。

有 built-in 方法吗?
如果没有,是否有一种方法可以在不编辑 simple_html_dom 的源代码的情况下完成它?

编辑:性能不是问题,因为输出将被缓存。
AND: 我刚刚意识到我可以做 $node->setAttribute('insertOnDisplay',$string) 然后在显示之前再次抓取文档,删除属性,并将属性值放入 innertext。在将其发布为答案之前,我会看看是否有其他更好的选择(并进行测试)。

我扩展了 simple_html_dom 和 simple_html_dom_node,在 simple_html_dom_node 中,我创建了一个 prepareOutput 方法,该方法遍历并找到具有 jdom-[before|after]:[outertext|innertext] 的任何属性,然后设置innertextoutertext 之前或之后的文本。这感觉像是一种 hacky 方法,但它确实有效。

我还稍微更改了 simple_html_dom 以使用 new static::$domClass 来实例化 dom 和 new static::$nodeClass 来实例化节点,而不是使用 new static,这样我就可以在内部创建新节点时实例化我的子类