jquery:编写方法

时间:2010-05-23 07:50:45

标签: javascript jquery

这是与此相同的问题: https://stackoverflow.com/questions/2890620/jquery-running-a-function-in-a-context-and-adding-to-a-variable

但是那个问题很糟糕。

再试一次,我正试图做这样的事情:

我有一堆我想从中获取数据的元素,数据是元素子类的形式。

<div id='container'>
    <span class='a'></span>
    <span class='b'></span>
    <span class='c'></span>
</div>
<div id='container2'>
    <span class='1'></span>
    <span class='2'></span>
    <span class='3'></span>
</div>

我有这样的方法:

jQuery.fn.grabData = function(expr) {
    return this.each(function() {
        var self = $(this);             
        self.find("span").each(function (){
            var info = $(this).attr('class');
            collection += info;
        });
    });
};

我要运行这样的方法:

var collection = '';
$('#container').grabData();
$('#container2').grabData();

该集合应该互相添加,以便最终得到这个

console.log(collection);

abc123

但是方法中未定义集合。如何让方法知道应该添加哪个集合?

感谢。

1 个答案:

答案 0 :(得分:2)

如果要为grabData函数的每次调用累加值,则需要一个全局变量:

var collection = '';
jQuery.fn.grabData = function(expr) {
    return this.each(function() {
        var self = $(this);             
        self.find('span').each(function () {
            var info = $(this).attr('class');
            collection += info;
        });
    });
};

另一方面,如果您只想单独调用grabData函数,则可以执行此操作:

jQuery.fn.grabData = function(expr) {
    var collection = '';
    this.each(function() {
        var self = $(this);             
        self.find('span').each(function () {
            var info = $(this).attr('class');
            collection += info;
        });
    });
    return collection;
};

然后像这样使用它:

var collection = $('#container').grabData();
console.log(collection);