根据方向换掉prev()或next()

时间:2015-12-14 11:57:46

标签: javascript jquery

我想根据我的选择使用正确的功能。 示例代码:

function move(direction){
    if (direction == 'next'){
        $(selector).someMethod().next().someMethod();
    }
    if (direction == 'back'){
        $(selector).someMethod().prev().someMethod();
    }
}

这可能吗?当唯一改变的是单一方法时,试图不重复代码。

2 个答案:

答案 0 :(得分:2)

使用括号表示法 - 将方法名称作为参数传递给move,验证它实际上是允许的方法之一,然后照常进行。

function move(direction){
    if (direction.search(/next|prev/) === -1) {
        console.log('invalid direction');
        return;
    }
    $(selector).someMethod()[direction]().someMethod();
}

答案 1 :(得分:0)

采取根本不会改变的步骤,将它们移到条件之外,并将条件中的条件存储在变量中。

function move(direction) {
    var element = $(selector);
    var otherElement;

    if (direction === "next") {
        otherElement = element.next();
    }
    else if(direction === "back") {
        otherElement = element.prev();
    }

    element.someMethod();
    otherElement.someMethod();
}

注意:selector来自哪里?如果它不是常数,请考虑将其作为参数传递给您的函数。

如果您希望它更具可扩展性,那么您不仅限于nextprev,而是可以使用您喜欢的任何选择器或方法,那么您可以定义一个带有方向名称的字典和一个返回另一个元素的函数:

var elementsInDirection = {
    "next": function(elem) { return elem.next(); },
    "back": function(elem) { return elem.prev(); },
    "up": function(elem) { return elem.parent(); },
    "down": function(elem) { return elem.children(); }
};

function move(direction) {
    var element = $(selector);
    var otherElement = elementsInDirection[direction](element);

    element.someMethod();
    if(otherElement) otherElement.someMethod();
}

现在您可以拥有move("up")move("down")或您需要定义的任何其他内容。