2013-11-25 62 views
3

是否有任何方法使用Symfony的DomCrawler選擇父元素的文本節點?使用Symfony DomCrawler選擇文本節點

在jQuery中您可以使用contents()方法和檢查nodeType == 3

+0

你是否在尋找像'innerHtml()'被html標籤分割的東西?這就是['contents()'](http://api.jquery.com/contents/)是正確的嗎? – nifr

回答

5

據我所知道的,Symfony的履帶不允許您遍歷文本節點。對於Crawler通常使用的內容,文本節點的深度可能不太常見。

但是,Crawler確實存儲文檔數據的DOMNodes允許文本節點遍歷。

舉例來說,如果你想遍歷一個履帶式的所有節點(包括文本節點)(假設它已經滲透到一個結果),你可以這樣做:

foreach ($crawler->getNode(0)->childNodes as $node) { 
    if ($node->nodeName === '#text') { 
     // you have a text node 
    } 
} 

有幾件事情注意:

  1. 的調用getNode()的實際返回的DOMNode(在我的IDE代碼完成是告訴我一個DOMElement,但的DOMNode是一個更安全的賭注,因爲它是基類),所以它拉出來的Crawler的上下文;從這裏你需要使用DOMNode屬性和方法。

  2. DOMNode的nodeName屬性是元素的HTML標記名稱,但是在文本節點的情況下,它似乎設置爲#text。或者,您也可以使用$node instanceof DOMText來檢測文本節點。

我知道這個問題是舊的,但我是有這個麻煩太多,想要得到這個答案,因爲它突然出現在谷歌相當高。