Возвращаемое значение JQuery

Я использовал код:

jQuery.fn.MyFunction = function(){
return this.each(function() {
    attributes = "test";

    return attributes;
});}

Но когда я звоню

 var1 = $(this).MyFunction();alert(var1);

У меня есть [объект], но не "тест".

Как разрешить плагин jquery вернуть какое-то значение?

Ответ 1

Плагины jQuery обычно предназначены для возврата объекта jQuery, чтобы вы могли цеплять вызовы методов:

jQuery("test").method1().method2() ...

Если вы хотите вернуть что-то еще, используйте следующий синтаксис:


jQuery.fn.extend({
    myFunction: function( args ) {
            attributes = "test";

            return attributes;
    }
});

или получить доступ к нему через свой индекс, используя [].

Ответ 2

Вот еще раз ваш код:

jQuery.fn.MyFunction = function() { #1
   return this.each(function() {    #2
      return "abc";                 #3
   });                              #4
};                                  #5

Теперь проверьте, что делает каждая строка.

  • Объявляем свойство MyFunction, которое является функцией для каждого объекта jQuery.
  • Эта строка является первым и последним выражением jQuery.MyFunction(). Мы возвращаем результат this.each(), а не результат лямбда-функции (используется как аргумент для jQuery.each()). И this.each() возвращает себя, поэтому конечным результатом является возврат объекта jQuery.

Строки 3-5 на самом деле не важны.

Просто рассмотрите эти два примера:

jQuery.fn.MyFunction = function() {
    return this.each(function() {
        return "abc";
    });
};

jQuery.fn.AnotherFunction = function() {
    return "Hello World";
};

var MyFunctionResult = $(document).MyFunction();
var AnotherFunctionResult = $(document).AnotherFunction();

alert(MyFunctionResult);
alert(AnotherFunctionResult);

Ответ 3

Я верю, что jQuery возвращает объект, поэтому вы можете поддерживать цепочки различных функций.

Ответ 4

Хмм, возможно, используйте

var1 = $(this)[0].MyFunction();alert(var1);

Но я не уверен, что это то, что вам нужно, или если ваш код работает вообще. Чего вы пытаетесь достичь? Вы действительно хотите вызвать this.each()?

Как и другие, jQuery в большинстве случаев возвращает объекты jQuery, и доступ к фактическому объекту может быть выполнен с помощью индексатора [] или метода get.