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

时间:2015-04-16 00:08:04

标签: php simple-html-dom

我需要在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。在将其作为答案发布之前,我会看看是否有其他更好的选择(并测试出来)。

1 个答案:

答案 0 :(得分:0)

我扩展了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,这样我就可以实现它在内部创建新节点时实例化我的子类