0

紛らわしいタイトルで申し訳ありません。私がやろうとしているのは、単純な. next()を実行する関数 (または単純な方法)ですが、次の要素がない場合は、最初に一致します。.prev()についても同じです- 前の要素がない場合、最後に一致します。だから私はこのようにしました:

var current_selected = getSelected();
if(current_selected.length) {
    var prev = current_selected.prev();
    if(prev.length) {
        setSelected(prev);
        return;
    }
}
setSelected(getLast());

しかし、私はそれがあまり好きではありません。何かご意見は?( getSelectedgetLastは jQuery オブジェクトを返します。

4

4 に答える 4

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();
};

$('#something').nextWrap()次に、またはを実行するだけです$('#something').prevWrap()

ここに簡単なデモがあります: http://jsfiddle.net/qpDKL/

注:これはほとんど and のように動作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']();
    };
});
于 2013-04-04T15:17:24.573 に答える
0

これらの行の周りの何か:

if (!$('selected').next().length)
    return $('selected').parent().children().first();
else
    return $('selected').next();

if (!$('selected').prev().length)
    return $('selected').parent().children().last();
else
    return $('selected').prev();
于 2013-04-04T15:21:02.843 に答える