Большинство методов запроса DOM доступны как Document
s, так и Element
s. Например,
console.assert(
document.getElementsByTagName && document.body.getElementsByTagName &&
document.getElementsByClassName && document.body.getElementsByClassName &&
document.querySelector && document.body.querySelector &&
document.querySelectorAll && document.body.querySelectorAll
);
Однако getElementById
доступно только для Document
:
console.assert(document.getElementById);
console.assert(document.body.getElementById == undefined);
Почему это так?
Уровень жизни WHATWG DOM говорит нам, что :
Веб-совместимость предотвращает использование метода getElementById()
для элементов
Рекомендация W3C DOM4 немного конкретнее :
Метод getElementById()
не предназначен для элементов для совместимости со старыми версиями jQuery. Если придет время, когда эта версия jQuery исчезнет, мы сможем ее поддержать.
Однако мне все еще трудно понять, в чем проблема. Как присутствие этих методов может отрицательно повлиять на поведение jQuery или других библиотек?
Я пытался просмотреть старые версии jQuery (например, 1.0.0 и 1.7.0 ), чтобы увидеть, намекает ли их использование getElementById
, почему это могло быть проблемой. Я вижу, что getElementById
имел обыкновение глючить в некоторых старых браузерах, но они обнаруживают это и вместо этого прибегают к надежной ручной реализации. Я не вижу нигде, чтобы это могло быть вызвано на элементе и вызвать ошибку. Откуда эта проблема совместимости?