我需要在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'
指定为自动插入显示。输出如下:
<div class="MyClass">
INSERTED STRING
<div itemprop="myVar">
</div>
</div>
所以我的想法是,当使用simple_html_dom api与元素进行交互时,就好像没有插入$string
一样。然后,当输出html时,在打开(或关闭)标记之后(或之前)立即插入$string
。
例如,$node->innertext = $string.$node->innertext
是不可接受的,因为它会影响解析,因为$node
会在开头有一个新的孩子。
是否有内置方法可以做到这一点?
如果没有,是否有办法在不编辑simple_html_dom
来源的情况下完成它?
编辑:性能不是问题,因为输出将被缓存
AND:我刚刚意识到我可以执行$node->setAttribute('insertOnDisplay',$string)
然后在显示之前再次抓取文档,删除属性,并将属性值放入innertext。在将其作为答案发布之前,我会看看是否有其他更好的选择(并测试出来)。
答案 0 :(得分:0)
我扩展了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
,这样我就可以实现它在内部创建新节点时实例化我的子类