2013-11-25 64 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来检测文本节点。

我知道这个问题是旧的,但我是有这个麻烦太多,想要得到这个答案,因为它突然出现在谷歌相当高。