0

我想创建一个新的 jQuery 函数,在其中我可以在选项中传递一个或多个值。然后,对于 DOM 的所有匹配元素,迭代所有不同的选项,但一次只有一个选项。因此,对于所有未处理的元素,重放原型函数。所有的处理都应该在同一个函数中,所以我想到了递归,但由于我对 javascript 中的原型设计并没有真正的经验,我不知道该怎么做。目前,没有错误,但甚至什么也没有发生。

那是对的吗 ?

谢谢你的启发。

(function($) {
    $.fn.foo = function (prop) {
        var options = $.extend({
            "elt" : "",   // Declaration of my options
            "callback" : function(){}
        }, prop)

        var optionsTab = options.elt.split('#');
        var current = optionsTab.slice(0,1),
        var remaining = optionsTab.slice(1);
        var result = this.each(function() {
            var el = $(this);
            // Code handling the first element in the option
        });

        if (remaining.length > 0) {
            $({ "elt": remaining.join("#") }); // Trial of recursion of foo
            return result;
        }
    }
4

2 回答 2

0

我认为您正试图在超时时递归调用,对吗?

    var result = this.each(function() {
        var el = $(this);
        // Code handling the first element in the option
    });

    if (remaining.length > 0) {
        $({ "elt": remaining.join("#") }); // Trial of recursion of foo
       var me = this;
       setTimeout(function(){
         me.foo(parameters);//not sure what the parameters should be
       },500);
    }
    return this;

一些有用的信息:https ://stackoverflow.com/a/16063711/1641941 (在“这个变量”下)

于 2013-11-10T13:21:43.320 回答
0

创建了这个小提琴,它可以工作:

$.fn.foo = function (prop) {
    var options = $.extend({
        "elt" : "",   // Declaration of my options
        "callback" : function(){}
    }, prop);

    var optionsTab = options.elt.split('#');
    var current = optionsTab.slice(0,1);
    var remaining = optionsTab.slice(1);
    this.each(function() {
        var el = $(this);
        // Code handling the first element in the option
    });

    if (remaining.length > 0) {
        this.foo({ "elt": remaining.join("#") }); // Trial of recursion of foo
    }
    return this;
};
于 2013-11-10T13:34:18.073 回答