Ошибка с «этим» в IE с помощью плагина jQuery

#internet-explorer #jquery-plugins

#internet-explorer #jquery-плагины

Вопрос:

Я кодирую плагин для jQuery, который теперь отлично работает в любом браузере, кроме IE. Это часть кода:

 (function( $ ){
    $.fn.myPlugin = function(options) {

        var methods = {
            getFirstList: function(el){
                return $("ul:first", el);
            }
        };

        return this.each(function(){
            ...
            var list = methods.getFirstList(this); 
            // "this" here refers to window or document in IE.
            ...
        });
    };
})( jQuery );
  

Когда я вызываю плагин ( $("#myObject").myPlugin(); ), ключевое слово «this» относится не к объекту DOM, а к окну или документу.

Как мне это исправить?

Комментарии:

1. Вы уверены, что это именно тот код, который демонстрирует эту проблему?

2. Я только что добавил еще несколько строк кода, чтобы сделать его более понятным.

3. Какую точную ошибку вы получаете?

Ответ №1:

Попробуйте заменить this на $(this)

Комментарии:

1. Да, верните это.каждая (функция(){ должна возвращать $(this).каждая (функция(){; .каждая не является функцией DOMs этого объекта.

2. @RussC: В плагине main this уже является объектом jQuery.

3. Хорошая мысль, я пропустил этот бит, однако «this» внутри getFirstList не обязательно является объектом jQuery, не так ли?

4. @RussC: Нет, но это не обязательно должно быть (в текущем контексте).

5. Я думаю, нам нужно, чтобы Джерадо указал, каково его точное сообщение об ошибке, да, это трюизм, но если это не одна из двух строк, которые я указал, то это не его фрагмент.