jquery插件方法返回值不是对象

jquery插件方法返回值不是对象,jquery,plugins,methods,return-value,Jquery,Plugins,Methods,Return Value,我写了一个jq插件,首先要初始化所选元素(每个元素都是)。 在代码的后面,我想得到一个由方法生成的字符串。但它返回的只是对象,而不是字符串 我在互联网上做了很多研究,但我不知道如何让插件一方面“可链接”,另一方面“返回任何值” 你觉得怎么样 (function($){ var methods = { init: function(val){ // Actions to initialize ALL selected Elements

我写了一个jq插件,首先要初始化所选元素(每个元素都是)。 在代码的后面,我想得到一个由方法生成的字符串。但它返回的只是对象,而不是字符串

我在互联网上做了很多研究,但我不知道如何让插件一方面“可链接”,另一方面“返回任何值”

你觉得怎么样

(function($){
    var methods = {
        init: function(val){
            // Actions to initialize ALL selected Elements
        }
        ,
        returner: function(val){
            alert('working with every selected element: '+$(this).width());
            // return anything
            return 'STRING PRODUCED BY THIS FUNCTION!';
        }
    }

    $.fn.myplug = function(method){
        var args = arguments;
        var init = 'init-myplug';
        return this.each(function(){
            var is_init = $(this).data(init);
            if (is_init && methods[method]){
                return methods[method].apply($(this), Array.prototype.slice.call(args, 1));
            } else if (!is_init && (typeof method === 'object' || !method)){
                $(this).data(init, true);
                return methods.init.apply($(this), Array.prototype.slice.call(args, 0));
            }
        });
    };
})(jQuery);

$('.selects_5_elements').myplug(); // init

$('.selects_5_elements').myplug('returner'); // get the string

第一步是从您的方法中收集结果。此时,您正试图通过each回调函数返回方法的结果,这是行不通的(each回调函数中的返回值用于中断循环)

我建议将所有结果收集在如下数组中:

var results = [];
this.each(function(){
    var is_init = $(this).data(init);
    if (is_init && methods[method]){
        results.push(methods[method].apply($(this), Array.prototype.slice.call(args, 1)));
    } else if (!is_init && (typeof method === 'object' || !method)){
        $(this).data(init, true);
        results.push(methods.init.apply($(this), Array.prototype.slice.call(args, 0)));
    }
});
此时,您可以简单地返回结果数组。但是,如果您希望允许某些方法是可链接的,而其他方法则返回方法调用的结果,那么您需要检查方法名称以确定要返回的值

if (method == 'returner')
    return results;
else
    return this;
另外,请注意,我们在这里返回的是数组,而不是字符串。原因是将为与选择器匹配的每个元素调用您的方法。所以如果你有五个匹配的元素,你会得到一个由5个字符串组成的数组


如果您真的只想要回一个字符串,那么您需要决定如何处理所有重复的字符串。是否要将所有字符串连接在一起?还是只返回第一个字符串?还是只有最后一根弦?所有选项都很容易完成-您可以根据自己的需求选择这些选项。

您需要做的唯一一件事就是将其放入每个回调中:

if ( args.length === 0 ) {
   // Init your plugin
   return this;
}

if ( args[0] === "returner" ) {
   // Generate your string
   return "STRING PRODUCED BY THIS FUNCTION!";
}

我是新来的。。。我还没有看到问题的日期。很抱歉