2015-07-20 1 views
3

Есть ли кто-нибудь, кто может объяснить примечание на section 5.2.2 of the W3C DOM4 specification?jQuery примечание в разделе 5.2.2 спецификации W3C DOM4

Соответствующая Цитата:

Примечания: Метод getElementById() не на элементы для совместимости с более старыми версиями JQuery. Если придет время, когда эта версия jQuery исчезла, мы могли бы ее поддержать.

Мне любопытно, как этот интерфейс явно вызовет проблему с jQuery и какие версии, есть ли у кого-нибудь пример?

ответ

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 объекта еще.

Это связано с проблемами совместимости с более старой версией jQuery, поскольку вы можете читать спецификации DOM4.

Но, что все это значит? это означает, что W3C пытался добавить этот метод в Element объекта, а также означает, что после этого «версии JQuery» disapear мы «может» быть в состоянии цепи getElementById() вызовы, как это:

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

Ничего особенного, они Бесполезный «т хочет наиболее популярная манипуляция DOM обертки к сбою или JQuery как member of the W3C была некоторое влияние на этом решении

Смежные вопросы