dom — PHP возвращает элемент с именем вместо ID

В следующем коде PHP DOMDocument::getElementById возвращает узел <a name="test">вместо узла <div id="test">:

<?php
$doc = new DOMDocument();
$doc->loadHTML('<a name="test"></a><div id="test"></div>'); // triggers duplicate ID warning
echo $doc->getElementById("test")->nodeName; // outputs "a"?>

Это происходит только для <a>узлы. Это предназначено?

JavaScript обрабатывает это, как я и ожидал:

<script>
window.addEventListener('DOMContentLoaded', function() {
document.body.innerHTML = '<a name="test"></a><div id="test"></div>';
console.log(document.getElementById('test'));
});
</script>

РЕДАКТИРОВАТЬ (вопрос был отмечен как дубликат): Этот вопрос не о том, должен ли я использовать name или же id а также не об использовании обоих name а также id, но почему PHP находит узлы с name атрибут, когда я ищу идентификатор.

3

Решение

Начиная с HTML5, name атрибут не поддерживается в a теги, так что похоже, что он изменился на id приписывать.

1

Другие решения

Скорее всего, это задержка от PHP, эмулирующего старое поведение IE. В IE 7 и более ранних версиях document.getElementById () действительно обрабатывает атрибуты имени в <a> элементы, как если бы они были атрибутами id и поэтому будут соответствовать <a> элемент, а не <div> элемент. IE давно продвинулся вперед, но, похоже, в этом отношении PHP не имеет.

1

Как ты можешь читать Вот

Для документов HTML (и типа MIME text / html) необходимо придерживаться следующей модели обработки, чтобы определить, что представляет собой указанная часть документа.

Разберите URL, и пусть fragid будет компонентом URL.
Если fragid — пустая строка, указанная часть документа является верхней частью документа.
Если в DOM есть элемент с идентификатором, точно равным fragid, то первым таким элементом в древовидном порядке является указанная часть документа; остановите алгоритм здесь.
Если в DOM есть элемент, имеющий атрибут name, значение которого точно равно fragid, то первым таким элементом в древовидном порядке является указанная часть документа; остановите алгоритм здесь.
В противном случае указанная часть документа отсутствует.

Когда я вставил ваш код в песочницу PHP, я заметил интересное предупреждение:
введите описание изображения здесь

0
По вопросам рекламы [email protected]