私はお勧めします:
$('button').click(
function(e) {
e.preventDefault();
var parent = $(this).closest('div');
if ($(this).hasClass('btn-move-up')) {
parent.insertBefore(parent.prev('div'));
}
else if ($(this).hasClass('btn-move-down')) {
parent.insertAfter(parent.next('div'));
}
});
JS フィドルのデモ。
省略された機能を追加するために編集されました(関連するボタンを非表示にします):
function firstAndLast(container) {
if (!container) {
return false;
}
else {
container.find('button:disabled').prop('disabled', false);
container.find('button.btn-move-up:first').prop('disabled', true);
container.find('button.btn-move-down:last').prop('disabled', true);
}
}
firstAndLast($('#container'));
$('button').click(
function(e) {
e.preventDefault();
var parent = $(this).closest('div'),
grandparent = $(this).closest('#container');
if ($(this).hasClass('btn-move-up')) {
parent.insertBefore(parent.prev('div'));
firstAndLast(grandparent)
}
else if ($(this).hasClass('btn-move-down')) {
parent.insertAfter(parent.next('div'));
firstAndLast(grandparent)
}
});
JS フィドルのデモ。
button
要素が実際には使用されていないという啓示に関して編集されました。代わりに、a
要素を使用しています。
function firstAndLast(container) {
if (!container) {
return false;
}
else {
container.find('a.disabled').removeClass('disabled')
container.find('a.btn-move-up:first').addClass('disabled');
container.find('a.btn-move-down:last').addClass('disabled');
}
}
firstAndLast($('#container'));
$('a').click(
function(e) {
var that = $(this);
if (!that.hasClass('disabled')) {
e.preventDefault();
var parent = $(this).closest('div'),
grandparent = $(this).closest('#container');
if ($(this).hasClass('btn-move-up')) {
parent.insertBefore(parent.prev('div'));
firstAndLast(grandparent)
}
else if ($(this).hasClass('btn-move-down')) {
parent.insertAfter(parent.next('div'));
firstAndLast(grandparent)
}
}
});
JS フィドルのデモ。
参考文献: