jQuery'each'简写

时间:2013-09-11 09:38:13

标签: javascript jquery html each

我有什么方法可以在每个人手上jquery吗?或者在编写jquery时是否有任何替代方法,这些方法比下面的代码短?

$('someElement').each(function () {
    functionName('value1', value2)
});
$('anotherElement').each(function () {
    functionName('value1', value2)
});
$('andMoreElement').each(function () {
    functionName('value1', value2)
});

functionName(foo, element){
   //function code here
}

4 个答案:

答案 0 :(得分:3)

截至该问题的 最新 版本,其中所有三个each使用相同的值,您最好使用逗号系列选择器(如果是选择器)或add功能(如果它们不是):

$('someElement, anotherElement, andMoreElement').each(function () {
    functionName('value1', value2)
});

functionName(foo, element){
   //function code here
}

$('someElement').add('anotherElement').add('andMoreElement').each(function () {
    functionName('value1', value2)
});

functionName(foo, element){
   //function code here
}

同样,这取决于'someElement''anotherElement'等是选择器还是元素。

由于您正在使用each,它会立即调用该功能,您可以 使用下面的curry选项。如果您使用的是click或类似内容,则在评估curry时(从调用函数到咖喱时),使用下面的value2选项会发生变化,这可能是理想的或不合需要的取决于您的用例。


回答问题的早期版本

遗憾的是,您无法使用$.proxyFunction#bind,因为它们都会更改通话中this的值。您可以创建一个curry function,重新使用它所调用的this

var slice = Array.prototype.slice;
function curry(f) {
    var args = slice.call(arguments, 1); // Copy args after `f`
    return function() {
        return f.apply(this, args.concat(slice.call(arguments, 0)));
    };
}

当你将函数和X个参数传递给curry时,它会返回一个函数,当调用它时,它将调用原始函数,并调用它所使用的this值,提供的参数到curry,然后提供给电话的任何参数。

然后:

$('someElement').each(curry(functionName, 'foo'));
$('anotherElement').each(curry(functionName, 'otherFoo'));
$('andMoreElement').each(curry(functionName, 'otherFoo'));

functionName(foo){
   //function code here
}

或者因为后两个用法具有相同的参数:

$('someElement').each(curry(functionName, 'foo'));
$('anotherElement, andMoreElement').each(curry(functionName, 'otherFoo'));
// Or:
$('anotherElement').add('andMoreElement').each(curry(functionName, 'otherFoo'));

functionName(foo){
   //function code here
}

答案 1 :(得分:2)

假设您要扩展选择,您可能会对.add()函数感兴趣:

$('someElement').add('onotherElement').each(function() { })

会将您的逻辑应用于someElement以及onotherElement

的所有匹配项

答案 2 :(得分:1)

 $('#onotherElement','#someElement').each(function () {
        functionName('foo')
    });

答案 3 :(得分:1)

编辑:这将允许您根据问题中的编辑传递参数。

var a = 'Function', b = 'works';

$('.a').each(foo.bind(this, a + 'foo', b + 'foo')); // (1)

function foo(a, b, i, el) {
  console.log(a, b, $(el).text());
}

JSfiddle

(1)我向vars添加了foo,以证明foo没有拾取全局变量,而是传入的参数。