определить использование версии jquery

0

Я пишу плагин, который можно использовать на любом веб-сайте, где я не знаю точную версию jquery и получаю несколько проблем с .on().

Чтобы исправить это, у меня есть что-то простое, но все равно получаю ошибки в jQuery 1.4.2.

var $myElements = $('.elements'),
    myFunction = function(e){
        console.log('here');
        e.preventDefault(); 
    }

if (typeof jQuery != 'undefined') {
    if(jQuery.fn.jquery < 1.4){
        $myElements.live('click', myFunction);
    } else {
        $(document).on('click', $myElements, myFunction);
    }
}
  • 1
    Вы не должны пытаться приспособить все версии jQuery. Что если они используют Zepto? Создайте собственную версию и присвойте ей пространство имен, чтобы вам была гарантирована функциональность.
Теги:

2 ответа

2
Лучший ответ

Основываясь на предыдущем ответе, вы также можете сделать это:

;(function($) {
  if(!$.fn.on) {
    $.fn.on = $.fn.live;
  }
}(window.jQuery || window.Zepto));

Затем вы можете использовать on в остальной части кода.

  • 1
    Намного более плавный ответ. Я удалю мою :).
  • 1
    Синтаксис для live не одинаков для .on поэтому, если я .on параметр делегирования события, произойдет сбой. Только одна из сотен предостережений такого подхода
Показать ещё 2 комментария
0

Вы должны объединить свою собственную версию jQuery, чтобы сэкономить много хлопот и много избыточного кода. Вы можете сделать это, используя noConflict, чтобы гарантировать, что и ваш код, и код исходного веб-сайта действуют независимо:

<!-- load your jQuery -->
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
var yourjQueryVersion = $.noConflict(true);
(function($) {
    // Now you can use $ just like you normally would
    // And it will only execute against jquery-1.11.0
    $(function() {
        var $myElements = $('.elements'),
            myFunction = function(e){
            console.log('here');
            e.preventDefault(); 
        }
        $(document).on('click', $myElements, myFunction); // Yay!
    });
})(yourjQueryVersion);
</script>

Это значит, что:

  • Вам не нужно писать дополнительный код для всех различий версии jQuery
  • Если целевой сайт обновится до jQuery 2.0 (или аналогичного), ни один из ваших кодов не сломается.
  • Исходный веб-сайт может даже использовать CDN, поэтому есть хороший шанс, что только одна копия библиотеки jQuery может быть загружена из-за кэширования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню