Php 在简单html dom输出上插入字符串
我需要在dom元素中插入一个字符串,以便它们在调用Php 在简单html dom输出上插入字符串,php,simple-html-dom,Php,Simple Html Dom,我需要在dom元素中插入一个字符串,以便它们在调用simple\u html\u dom::\u tostring时显示,但这样它们就不会影响simple\u html\u dom api 因此,如果我有一个简单的\u html\u dom节点,其中$node->outertext如下所示: <div class="MyClass"> <div itemprop="myVar"> </div> </div> 因此,我们的想法是,
simple\u html\u dom::\u tostring
时显示,但这样它们就不会影响simple\u html\u dom api
因此,如果我有一个简单的\u html\u dom节点,其中$node->outertext
如下所示:
<div class="MyClass">
<div itemprop="myVar">
</div>
</div>
因此,我们的想法是,当使用简单的html dom api与元素交互时,它好像没有插入$string
。然后在输出html时,在开始(或结束)标记之后(或之前)立即插入$string
例如,$node->innertext=$string.$node->innertext
是不可接受的,因为它会影响解析,因为$node
在开头会有一个新的子级
有没有一种内置的方法可以做到这一点?如果没有,是否有一种方法可以在不编辑
simple\u html\u dom
的源代码的情况下实现它
编辑:性能不是问题,因为输出将被缓存。和:我刚刚意识到我可以只做
$node->setAttribute('insertOnDisplay',$string)
然后在显示之前再次刮取文档,删除属性,并将属性值放入内部文本。在将其作为答案发布之前,我会看看是否还有其他更好的选择(并进行测试)。我扩展了simple_html_dom和simple_html_dom_node
并在simple_html_dom_node
中创建了一个prepareOutput
方法,该方法使用jdom-[before | after]:[outertext]
然后将文本设置为在innertext
或outertext
之前或之后。这感觉像是一种令人讨厌的方式,但它确实有效
我还稍微更改了
simple\u html\u dom
以使用新静态::$domClass
来实例化dom和新静态::$nodeClass
来实例化节点,而不是使用新静态
,因此,我可以让它在内部创建新节点时实例化我的子类我不明白为什么不能在打印html之前插入文本?如果只是出于输出目的,那么只要创建另一个变量就可以了,如果您希望原始节点不受影响,我正在抓取文档,并且满足某些条件时(假设一个节点有一个特定的标记或属性),然后我将元素传递给其他函数对其进行操作,比如添加一个值
属性,或者……这些函数中的任何一个都可以附加simple_html_dom
不应该看到的文本(输出时除外).正因为如此,我认为您的任何一种方法都会增加显著的复杂性…不过,我现在意识到,我可以只做$node->setAttribute('insertOnDisplay',$string)
,然后在显示之前再次刮除文档,删除属性,并将属性值放入内部文本。
<div class="MyClass">
INSERTED STRING
<div itemprop="myVar">
</div>
</div>