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

时间:2015-07-20 20:41:02

标签: javascript jquery dom w3c

是否有人可以在section 5.2.2 of the W3C DOM4 specification上解释说明?

相关报价:

  

注意: getElementById()方法不适用于与旧版jQuery兼容的元素。如果时间到了那个版本的jQuery消失了,我们也许能够支持它。

我很好奇这个界面如何明确地导致jQuery出现问题以及有哪些版本,有没有人有例子?

2 个答案:

答案 0 :(得分:2)

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

很难确切地说出哪个版本会导致问题,而且确切地说在哪些情况下,但是对旧的jQuery版本进行快速查看,您会发现旧版本中的find()与具有{{1}的元素不兼容方法。

回到1.3版,你可以尝试将方法添加到HTMLElement,你会发现它混淆了结果。更新版本正确处理此问题。请参阅代码段:

getElementById
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);

答案 1 :(得分:1)

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

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

但是,这一切意味着什么?这意味着W3C试图将此方法添加到Element对象中,这也意味着一旦这个“jQuery版本”消失,我们“可能”能够链接getElementById()这样的调用:

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

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