почему функция плагина jquery всегда возвращает объект вместо строки? - PullRequest
3 голосов
/ 11 января 2012

вот мой код для пользовательского плагина jquery:

(function($){
    $.fn.extend({
        getmyValue : function(){
        return this.each(function() {
                return this.myVal;
        });
        },
        initPlugin : function(){
        return this.each(function() {
                this.myVal='Some results';
        });
        }
    });
})(jQuery);

когда я запускаю этот код:

$(document).ready(function() {

$("#div").initPlugin();
alert($("#div").getmyValue());
});

возвращаемое значение не простая строка, как предполагалось, а объект($ ("# div") возвращается)

что я не могу понять, почему цепочка возврата не работает?

Ответы [ 3 ]

4 голосов
/ 11 января 2012

Поскольку возвращаемое значение each - это объект, для которого вы вызвали each.Возвращаемое значение функции each вызывает используется, чтобы определить, следует ли прекратить зацикливание (то есть итерационная функция может вернуть false, чтобы прекратить зацикливание - ссылка на документ ).

Из вашего кода неясно, что вы действительно хотите сделать в getmyValue;вернуть значение, которое вы сохранили в самом экземпляре jQuery?Вернуть myVal, сохраненный в первом содержавшемся элементе?Вернуть массив значений myVal из всех содержащихся элементов?

Если вы имели в виду myVal, сохраненный в экземпляре jQuery с помощью вашего плагина:

getmyValue : function(){
    // Here, `this` is the jQuery instance on which `getmyvalue` was called
    return this.myVal;
},

Если вы имели в видуmyVal для первого элемента (обратите внимание, что в типичном случае это необработанный элемент DOM):

getmyValue : function(){
    // Here, `this` is the jQuery instance on which `getmyvalue` was called.
    // `this[0]` is the first matched element (a raw DOM element, typically).
    // Note we check before accessing it to see if it's there, since a jQuery
    // instance may have matched zero elements.
    return this[0] ? this[0].myVal : undefined;
},

Если вы имели в виду массив значений myVal из всех сопоставленных элементов (опять же, этив обычном случае это будут необработанные элементы DOM:

getmyValue : function(){
    // Here, `this` is the jQuery instance on which `getmyvalue` was called.
    return this.map(function() {
            // Here, though, `this` one of the elements wrapped by the jQuery,
            // instance typically a raw DOM element. (Each of them in a loop.)
            return this.myVal;
    }).get();
},

... который использует map для получения массива значений в JQuery-оболочке, а затем get, чтобы получить из него необработанный массив.

1 голос
/ 11 января 2012

Вы возвращаете результат this.each() вместо this.myVal:

getmyValue: function() {
    return this.myVal;
}
0 голосов
/ 11 января 2012

Возвращением .each является объект.Если вы замените это на .map, тогда ваш код вернет список значений через запятую

jQuery Map

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...