<div>
<a>abc</a>
xyz
</div>
鉴于上述 HTML 结构,$divElement->nodeValue
当我只想获取 'xyz' 时,返回 'abc xyz'。$divElement->getAttribute('value')
是空的。
如何在不删除<a>
元素的情况下获得“xyz”?
只需遍历<div>
并组合所有文本节点:
$dom=new DOMDocument;
$dom->loadHTML(<<<HTML
<div>
<a>abc</a>
xyz
</div>
HTML
);
$div=$dom->getElementsByTagName("div")->item(0);
var_dump($div->childNodes->length);//just to debug
$txt="";
foreach(range(0,$div->childNodes->length-1) as $idx)
{
if($div->childNodes->item($idx)->nodeType==3)
{
$txt.=$div->childNodes->item($idx)->nodeValue;
}
}
var_dump($txt);
nodeType==3
表示文本节点。对应nodeName
的是#text
。
你<div>
实际上有三个孩子:一个text
节点,一个<a>
节点和另一个text
节点。至少 XML 标准是这么说的。第一个文本节点包含和
之间的空白。第二个包含您的.<div>
<a>
xyz
如果你检查$divElement->childNodes
,我相信你应该得到这两个节点,你可以区分这两者。