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 Living Standard 告诉我们:
为了保持网页兼容性,元素上不会暴露
getElementById()
方法。
W3C DOM4 Recommendation 更具体地说明:
为了与旧版本的 jQuery 兼容,元素上没有
getElementById()
方法。如果那个版本的 jQuery 消失了,我们可能会支持它。
然而,我仍然很难理解问题所在。这些方法的存在如何对 jQuery 或其他库的行为产生负面影响?
我尝试查看旧版本的jQuery(例如1.0.0和1.7.0),以查看它们对getElementById
的使用是否暗示了为什么会出现问题。我发现在一些旧浏览器中getElementById
曾经存在缺陷,但是它们检测到这一点并回退到可靠的手动实现。我没有看到它可能被调用并导致错误的任何地方。这个兼容性问题来自哪里?
Element#getElementById
会破坏使用该版本jQuery的现有网站,很明显至少在2013年被广泛部署。 - Ry-