以下是我的函数的第一部分,其中direction是一个整数,用于确定是使用.prev()
还是.next()
。
有没有办法将prev
或next
作为参数direction
传递?
function nextImage(direction) {
var id = $('#current-image').attr('data-id');
if(direction < 0) {
var ele = $('#' + id).prev();
if(ele.length == 0)
ele = $('#' + id).siblings().last();
}
if(direction > 0) {
var ele = $('#' + id).next();
if(ele.length == 0)
ele = $('#' + id).siblings().first();
}
我觉得这可能是不可能的,我已经看了很多其他资源来尝试解决这个问题,尽管我的措辞可能阻止我找到解决方案。
答案 0 :(得分:2)
有没有办法将prev或next作为参数方向传递?
是。函数是对象,你可以传递它们。但是,在您的情况下,您必须同时通过prev
/ next
和first
/ last
,这会开始变得有点笨拙:
function nextImage(move, pick) {
var id = $('#current-image').attr('data-id');
var ele = move.call($('#' + id));
if (ele.length == 0) {
ele = pick.call($('#' + id).siblings());
}
}
和
nextImage($.fn.prev, $.fn.last);
请注意使用Function#call
进行调用,以便this
引用我们希望调用操作的jQuery对象。
另一种选择是传递他们的名字并使用括号表示法:
function nextImage(move, pick) {
var id = $('#current-image').attr('data-id');
var ele = $('#' + id)[move]();
if (ele.length == 0) {
ele = $('#' + id).siblings()[pick]();
}
}
和
nextImage("prev", "last");
或者,您可能拥有对象中的那些并只传入一个键:
var nextImageFunctions = {
"next": {
move: $.fn.next,
pick: $.fn.first
},
"prev": {
move: $.fn.prev,
pick: $.fn.last
}
};
function nextImage(direction) {
var functions = nextImageFunctions[direction];
var id = $('#current-image').attr('data-id');
var ele = functions.move.call($('#' + id));
if (ele.length == 0) {
ele = functions.pick.call($('#' + id).siblings());
}
}
和
nextImage("prev");
答案 1 :(得分:-1)
喜欢这个吗?
function nextImage(direction, callBack) {
if (direction > 0) {
// do stuff
} else {
// do other fun stuff
}
if (callBack) callBack()
}
用法
// No callback
nextImage(direction);
// Callback
nextImage(direction, $('#div-to-change').html('Next image was run'));