【发布时间】:2015-01-09 18:47:14
【问题描述】:
我正在使用 DOMDocument 进行 DOM 操作,但在使用 getElementById() 方法时遇到了问题。我正在寻找一个 id 为“内容”的 div,但这会返回 NULL:
$element = $document->getElementById('content');
if($element instanceof DOMElement)
{
// do something
}
但是,以下代码确实返回了我正在寻找的元素:
$elements = $document->getElementsByTagName('div');
foreach($elements as $element)
{
if($element->getAttribute('id') == 'content')
{
// do something
break;
}
}
我可能忽略了一些简单的东西,但那两段代码看起来和我一模一样。 (或者至少应该以相同的方式工作。)第二段代码现在可以运行,但保持这种方式确实感觉不对。我想知道为什么当第二种方法成功时,第一段代码未能返回正确的元素。
【问题讨论】:
-
您能否在第二个示例中的
// do something点验证它确实是instanceof DOMElement- 也许它被报告为其他东西? -
@KirenSiva $document 可能是新的 DomDocument;
-
是的,循环中的 $element 是 DOMElement 的一个实例。在第一个 sn-p 中,$element 等于 NULL。变量 $document 是 DOMDocument 的一个实例。
-
@Sherlock 我发现:“请注意,如果您的 HTML 不包含 doctype 声明,则 getElementById 将始终返回 null。”,通过查找标记名,然后查找该标记名的 ID,它将返回 id。
-
哦,真的!请将其添加为答案!