jQuery,接下来,上一个,骑自行车到第一个和最后一个

Uns*_*tal 0 javascript jquery

对不起这个令人困惑的标题.我想要做的是一个函数(或者只是一个简单的方法),它将执行简单的.next(),但如果没有下一个元素,则先匹配.对于.prev()也一样 - 如果没有前一个元素,则匹配最后一个.所以我这样做了:

var current_selected = getSelected();
if(current_selected.length) {
    var prev = current_selected.prev();
    if(prev.length) {
        setSelected(prev);
        return;
    }
}
setSelected(getLast());
Run Code Online (Sandbox Code Playgroud)

但我真的不喜欢它,我认为有一些漂亮的方式做到这一点.有什么想法吗?(getSelectedgetLast返回jQuery对象.

jma*_*777 5

你可以创建一些小便利插件:

$.fn.nextWrap = function() {
    var $next = this.next();
    if ($next.length) return $next;
    return this.siblings().first();
};

$.fn.prevWrap = function() {
    var $prev = this.prev();
    if ($prev.length) return $prev;
    return this.siblings().last();
};
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地做$('#something').nextWrap()$('#something').prevWrap().

这是一个快速演示:http://jsfiddle.net/qpDKL/

注意:这将主要表现为prev()next()(当然包装行为),但它不支持prev|next(selector)语法.


编辑:这是一个稍微简洁的插件语法,因为它们几乎相同:

$.each(['next', 'prev'], function(i, nextOrPrev) {
    $.fn[nextOrPrev + 'Wrap'] = function() {
        var $item = this[nextOrPrev]();
        if ($item.length) return $item;
        return this.siblings()[nextOrPrev === 'next' ? 'first' : 'last']();
    };
});
Run Code Online (Sandbox Code Playgroud)