有没有办法使用Symfony的DomCrawler选择父元素的文本节点?
在jQuery中,您可以使用contents()
方法并检查nodeType == 3
答案 0 :(得分:6)
据我所知,Symfony Crawler不允许您遍历文本节点。对于Crawler通常使用的内容,与文本节点一样深,可能并不常见。
但是,Crawler真正存储文档数据的DOMNode确实允许文本节点遍历。
例如,如果要循环遍历Crawler的所有节点(包括文本节点)(假设它已经过滤到一个结果),您可以这样做:
foreach ($crawler->getNode(0)->childNodes as $node) {
if ($node->nodeName === '#text') {
// you have a text node
}
}
有几点需要注意:
对getNode()
的调用实际上返回了一个DOMNode(我的IDE中的代码完成告诉我DOMElement,但DOMNode是一个更安全的赌注,因为它是基类),所以它将它从履带的上下文;从这里你需要使用DOMNode属性和方法。
DOMNode的nodeName
属性是元素的HTML标记名称,但对于文本节点,它似乎设置为#text
。或者,您也可以使用$node instanceof DOMText
来检测文本节点。
我知道这个问题比较老了,但我也遇到了这个问题,并希望得到一个答案,因为它在谷歌中出现了相当高的。