Я использовал код:
jQuery.fn.MyFunction = function(){
return this.each(function() {
attributes = "test";
return attributes;
});}
Но когда я звоню
var1 = $(this).MyFunction();alert(var1);
Я добрался [объект], но не "тест".
Как позволить плагин jQuery, возвращают некоторое значение?
Плагины jQuery обычно предназначены для возврата объекта jQuery, поэтому вы можете объединять вызовы методов:
jQuery("test").method1().method2() ...
Если вы хотите вернуть что-то еще, используйте следующий синтаксис :
jQuery.fn.extend({
myFunction: function( args ) {
attributes = "test";
return attributes;
}
});
или получить доступ к нему через его индекс, используя []
.
Я считаю, что jQuery возвращает объект, поэтому вы можете поддерживать цепность различных функций.
Вот еще раз ваш код:
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);
Хм, возможно, использовать
var1 = $(this)[0].MyFunction();alert(var1);
Но я не уверен, что это то, что вы хотите, и работает ли ваш код вообще. Чего вы пытаетесь добиться? Вы уверены, что хотите вызвать this.each()
?
Как сказали другие, jQuery в большинстве случаев возвращает объекты jQuery, а доступ к фактическому объекту можно получить с помощью индексатора []
или метода get
.