Jquery 为遍历所有元素的每个函数编写一个可重用的

Jquery 为遍历所有元素的每个函数编写一个可重用的,jquery,jquery-plugins,Jquery,Jquery Plugins,我的Jquery插件中有以下代码: return this.each(function(){ $(this).removeAttr('src'); new_src = generate_src(); $(this).attr('src' , new_src); }); return this.each(function(){ total_images = get_prop($(this)); // this is

我的Jquery插件中有以下代码:

    return this.each(function(){
        $(this).removeAttr('src');
        new_src = generate_src();
        $(this).attr('src' , new_src);
    });
return this.each(function(){
        total_images = get_prop($(this)); // this is the new line added , which calls the get_prop function
        $(this).removeAttr('src');
        new_src = generate_src();
        $(this).attr('src' , new_src);
    });
现在我有一个函数,它检查数组中是否存在特定的elements src属性,如果不存在,它会将当前的elements src添加到数组中,让我向您展示该函数:

  function get_prop(current){
        var current_src = current.attr('src');
        if ($.inArray(current_src , src_storage) === -1) {
            src_storage.push(current_src);
        }
        return src_storage.length;
    }
total_images = get_prop($(this));
var execute_function = function(element , function_name){
            element.each(function(){
                val = function_name;
            });
            return val;
        }
现在假设我在插件中执行以下操作:

    return this.each(function(){
        $(this).removeAttr('src');
        new_src = generate_src();
        $(this).attr('src' , new_src);
    });
return this.each(function(){
        total_images = get_prop($(this)); // this is the new line added , which calls the get_prop function
        $(this).removeAttr('src');
        new_src = generate_src();
        $(this).attr('src' , new_src);
    });
请注意我是如何添加以下行的:

total_images = get_prop($(this));
此方法的问题

each函数实际上一次遍历每个元素,这意味着当我在each函数中调用以下函数时:

  function get_prop(current){
        var current_src = current.attr('src');
        if ($.inArray(current_src , src_storage) === -1) {
            src_storage.push(current_src);
        }
        return src_storage.length;
    }
total_images = get_prop($(this));
var execute_function = function(element , function_name){
            element.each(function(){
                val = function_name;
            });
            return val;
        }
它将只对当前元素执行,然后继续执行下一组元素,我实际希望它做的是,迭代整个选定元素集,返回计数,然后执行剩余代码集

那么我做了什么

我采取了以下的方法

    this.each(function(){
        total_images = get_prop($(this));
    });


    return this.each(function(){
        $(this).removeAttr('src');
        new_src = generate_src();
        $(this).attr('src' , new_src);
    });

    // function to check for images that maybe repeated .
    function get_prop(current){
        var current_src = current.attr('src');
        if ($.inArray(current_src , src_storage) === -1) {
            src_storage.push(current_src);
        }
        return src_storage.length;
    }
请注意我是如何添加以下代码行的:

this.each(function(){
            total_images = get_prop($(this));
        });
$(this).callsomefunction();
现在它工作得很好,它做了我想要它做的事,也就是说


为所有选定元素调用get_prop函数。但不知何故,这似乎是一段多余的代码,一点也不整洁,我不确定一个经验丰富的程序员是否会采用这种方法,我对Jquery相当陌生,我真正想要的是,如果我能编写一个函数,它内部有一个遍历所有元素的每个函数,但不知怎的,我就是不知道怎么做

我会尽量让我的答案比我的问题更清楚

首先,我的问题是什么:

我的问题是每个函数,尤其是它一次迭代一个元素。让我给你举个例子:

return this.each(function(){

                $(this).callsomefunction();
                // call some more functions
                // some more set of instructions
        });
现在看一下上面的代码,假设我真正想要的是每个函数执行以下代码行:

this.each(function(){
            total_images = get_prop($(this));
        });
$(this).callsomefunction();
对于所有选定元素,在移动到下一组指令之前。现在我该怎么做

@abhitalks提供了一把小提琴,实际上解决了我的问题:

以下是我的简单版本:

我有以下功能:

function get_prop(current){
            var current_src = current.attr('src');
            if ($.inArray(current_src , src_storage) === -1) {
                src_storage.push(current_src);
            }
            return src_storage;
        }
现在,我想编写一个函数,当调用该函数时,将对所有选定元素执行上述函数

因此,我编写了以下函数:

  function get_prop(current){
        var current_src = current.attr('src');
        if ($.inArray(current_src , src_storage) === -1) {
            src_storage.push(current_src);
        }
        return src_storage.length;
    }
total_images = get_prop($(this));
var execute_function = function(element , function_name){
            element.each(function(){
                val = function_name;
            });
            return val;
        }
现在,在each函数中,我有以下内容:

return this.each(function(){
                store_val = execute_function($(this) , get_prop($(this)));
                store_val_length = store_val.length;
                $(this).removeAttr('src');
                new_src = generate_src();
                $(this).attr('src' , new_src);           
        });
因此,代码总体如下所示:

var execute_function = function(element , function_name){
            element.each(function(){
                val = function_name;
            });
            return val;
        }


        return this.each(function(){

                store_val = execute_function($(this) , get_prop($(this)));
                store_val_length = store_val.length;
                $(this).removeAttr('src');
                new_src = generate_src();
                $(this).attr('src' , new_src);           
        });

        // function to check for images that maybe repeated .
        function get_prop(current){
            var current_src = current.attr('src');
            if ($.inArray(current_src , src_storage) === -1) {
                src_storage.push(current_src);
            }
            return src_storage;
        }

为什么这个问题似乎是这个问题的延续:?@abhitalks这个问题值得一个独立的问题吗?我觉得是的,所以我问。我的问题是否足够清楚,如果不清楚,我不介意编辑,而且,我确实有一个解决方案,我会尝试实现,如果成功地在这里分享它作为一个答案,我不期望redy在stackoverflow上生成烘焙代码,总之,我的想法是,编写一个接受2个参数1的函数,要迭代的元素和2,要在迭代的元素上执行的函数,如果听起来含糊不清,请等一会儿,直到我有时间发布我的答案。这很公平。只是想再澄清一下。。(1) 是否要将“generateSource”函数作为参数传递?(2) 你在用“total_images”做什么?您的代码似乎没有使用它。你想从插件返回一个用于主脚本的总数吗?在这里,我为你做了一个:@abhitalks查看我的答案,如果你能更好,请发布一个答案,我将非常乐意接受。:)