2011-06-12 2 views
5

Я пытаюсь проверить, если метод .prop() существует на текущий JQuery включен (по причине совместимости) через:JQuery .prop() Совместимость

if(typeof $.prop === 'function') 

Я хотел бы ожидать, что условие выше true для jQuery >= 1.6 и false для jQuery < 1.6, как я могу понять из docs

Во всяком случае, это тестирование на jsfiddle, приводит к:

typeof $.prop === 'function':

  • true когда jQuery >= 1.6
  • false когда jQuery < 1.6 and jQuery > 1.3
  • true когда jQuery <= 1.3

here является очень простой скрипт, который обеспечивают результаты выше (просто включите JQuery версию, чтобы увидеть, что Я описал).

Когда я пытаюсь использовать это .prop() с jQuery i.e 1.3, я получаю ошибку .prop is not a function. Такая же проблема также тестируется вне jsfiddle. Нормально ли такое поведение? Как я могу проверить, действительно ли .prop()?

Благодаря

+0

я сделал тест на его FF4 , Safari5 и Chrome12 – Dalen

+0

Извините неправильно понято –

+0

Зачем нужна поддержка 1.3. Это действительно старо. – Raynos

ответ

7

alert(typeof $.fn.prop === 'function')

Вы хотите проверить для .prop метода на прототипе JQuery, который живет на $.fn. Это неверно в 1.3.

Также я бы избегал обнаружения функций для версий jQuery и вместо этого поддерживал определенную версию (и вверх).

4

Вы проверки наличия статического метода .

Вам необходимо проверить метод экземпляра, написав $.fn.prop ($.fn - это то же самое, что и $.prototype).

+0

Это то же самое, что '$ .fn.init.prototype' – Raynos

6

То, что я сделал, это построить совместимую функцию опоры, для версии JQuery, которая не использует пропеллер:

(function($){ 
    if (typeof $.fn.prop !== 'function') 
    $.fn.prop = function(name, value){ 
     if (typeof value === 'undefined') { 
      return this.attr(name); 
     } else { 
      return this.attr(name, value); 
     } 
    }; 
})(jQuery); 

Вы можете проверить этот код: http://jsfiddle.net/JtK2Q