【问题标题】:Document::getElementById('content') doesn't work, but the element is thereDocument::getElementById('content') 不起作用,但元素在那里
【发布时间】: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。
  • 哦,真的!请将其添加为答案!

标签: php dom


【解决方案1】:

我发现了这个:

请注意,如果您的 HTML 不包含 doctype 声明, 那么 getElementById 将始终返回 null。

通过查找标记名,然后查找该标记名的 ID,它将返回该 ID。

Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多