2015-07-20 46 views

回答

2

要扩展@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>

1

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

这是由于您可以在DOM4规范中读取的旧版jQuery的兼容性问题。

但是,这一切意味着什么?这意味着W3C尝试这种方法添加到Element对象,同时也意味着,一旦这个disapear“jQuery的版本”,我们“可能”能够链getElementById()调用是这样的:

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

没什么特别的,他们没不想要最流行的DOM处理包装崩溃或jQuery作为member of the W3C已对这一决定产生一定影响