jQuery W3C DOM4 规范第 5.2.2 节中的注释

jQuery note in Section 5.2.2 of W3C DOM4 Specification

有没有人可以解释一下 section 5.2.2 of the W3C DOM4 specification 上的注释?

相关引用:

Note: The getElementById() method is not on elements for compatibility with older versions of jQuery. If a time comes where that version of jQuery has disappeared, we might be able to support it.

我很好奇这个接口如何明确地导致 jQuery 的问题以及什么版本,有人有例子吗?

看起来 getElementById 方法只出现在 document 全局对象上,它不是 DOM4 Element 对象 的一部分然而.

这是由于与旧版本 jQuery 的兼容性问题,您可以阅读 DOM4 规范。

但是,这一切意味着什么?这意味着 W3C 试图将此方法添加到 Element 对象中,也意味着一旦此 "version of jQuery" 消失,我们 "might" 能够像这样链接 getElementById() 调用:

var myElement = document.getElementById("header").getElementById("slogan");

没什么特别的,他们不希望最受欢迎的 DOM 操作包装器崩溃或 jQuery 因为 member of the W3C 对这个决定有一些影响

为了扩展@Nan 的答案,它可能与 jQuery 使用 getElementById 来验证迭代中的一个步骤有关。将此方法添加到 HTMLElement 将使某些条件在 jQuery 代码的一部分依赖于它不验证时验证。

很难说到底是哪个版本导致了这个问题,具体是在什么情况下,但是快速查看旧的 jQuery 版本,你会发现旧版本的 find() 与具有 getElementById 方法的元素。

回到 1.3 版本,您可以尝试将方法添加到 HTMLElement 中,您会发现它弄乱了结果。较新的版本可以正确处理此问题。请参阅代码段:

alert('Without getElementById method on HTMLElement, length of $("div").find("#test") is ' + $('div').find('#test').length);
window.HTMLElement.prototype.getElementById = function(str){
    console.log(str);
    return str;
}

alert('With getElementById method on HTMLElement, length of $("div").find("#test") is ' + $('div').find('#test').length);
<script src="https://code.jquery.com/jquery-1.3.js"></script>
<div id="container"><div id="test"></div></div>