我有什么方法可以在每个人手上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
}
答案 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
选项会发生变化,这可能是理想的或不合需要的取决于您的用例。
回答问题的早期版本:
遗憾的是,您无法使用$.proxy
或Function#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());
}
(1)我向vars添加了foo,以证明foo
没有拾取全局变量,而是传入的参数。