为什么jquery插件函数总是返回对象而不是字符串?

时间:2012-01-11 15:07:13

标签: javascript jquery jquery-plugins

这是我的自定义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 个答案:

答案 0 :(得分:4)

因为each的返回值是您调用each的对象。函数each 调用的返回值用于确定是否停止循环(即,迭代函数可以返回false以停止循环 - docs link )。

从您的代码中不清楚您在getmyValue中真正想做什么;返回你存储在jQuery实例本身的值?返回存储在第一个包含元素上的myVal?从所有包含的元素返回myVal值的数组?

如果你的意思是你的插件存储在jQuery实例上的myVal

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 :(得分:1)

您将返回this.each()而不是this.myVal的结果:

getmyValue: function() {
    return this.myVal;
}

答案 2 :(得分:0)

.each的返回是一个对象。如果用.map替换它,那么您的代码将返回以逗号分隔的值列表。

jQuery Map