2015-04-16 26 views
0

我需要在dom元素中插入一個字符串,以便在simple_html_dom::__tostring被調用時顯示,但它們不會影響simple_html_dom api。在簡單的html dom輸出上插入字符串

所以,如果我有一個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)然後在顯示前再次抓取文檔,刪除屬性,並將屬性值放入內聯文本中。我會看看我是否有其他更好的選擇(並測試它),然後再發布它作爲答案。

+0

我當我的實例子混淆爲什麼你不能在打印出html之前插入文本? – MasterOdin

+0

如果它只是爲了輸出的目的,然後只是創建另一個變量,如果你想原始節點不變 – Ghost

+0

我颳了一個文件,當滿足某些條件(說一個節點有一個特定的標籤或屬性),然後我將元素傳遞給其他函數作用於它們,比如添加一個'value'屬性或者......這些函數中的任何一個都可以添加不應該被'simple_html_dom'看到的文本(輸出時除外)。因此,任何一種方法都會增加顯着的複雜度,我認爲... – Jakar

回答

0

我延伸simple_html_dom和simple_html_dom_node和在simple_html_dom_node,我創建一個prepareOutput方法通過去,並找到與jdom-[before|after]:[outertext|innertext]任何屬性然後將文本是之前或innertextoutertext之後。這感覺像一個黑客的方式來做到這一點,但它的工作原理。

我也改變simple_html_dom一點點地使用new static::$domClass實例化一個DOM和new static::$nodeClass用於實例節點,而不是使用new static,這樣我就可以使創建一個新的節點內部