在简单 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]
的任何属性,然后设置innertext
或 outertext
之前或之后的文本。这感觉像是一种 hacky 方法,但它确实有效。
我还稍微更改了 simple_html_dom
以使用 new static::$domClass
来实例化 dom 和 new static::$nodeClass
来实例化节点,而不是使用 new static
,这样我就可以在内部创建新节点时实例化我的子类
我需要在 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]
的任何属性,然后设置innertext
或 outertext
之前或之后的文本。这感觉像是一种 hacky 方法,但它确实有效。
我还稍微更改了 simple_html_dom
以使用 new static::$domClass
来实例化 dom 和 new static::$nodeClass
来实例化节点,而不是使用 new static
,这样我就可以在内部创建新节点时实例化我的子类