目标是在其左兄弟之前或其兄弟之后移动一个元素。
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>One</li>
</ul>
只给出元素的索引,我需要向左或向右移动它。假设索引是1(LI用“Two”作为innerText),然后我想将它移到左边,输出应该是:
<ul>
<li>Two</li>
<li>One</li>
<li>Three</li>
<li>One</li>
</ul>
答案 0 :(得分:21)
如果您需要向左或向右移动元素,可以使用next
和prev
之类的jQuery方法来帮助您获取可以应用insertAfter
的下一个和上一个元素insertBefore
。
//Move right:
$(elementToBeMoved).insertAfter($(elementToBeMoved).next());
//Move left:
$(elementToBeMoved).insertBefore($(elementToBeMoved).prev());
答案 1 :(得分:14)
/**
* @param siblings {jQuery} List of sibling elements to act upon
* @param subjectIndex {int} Index of the item to be moved
* @param objectIndex {int} Index of the item to move subject after
*/
var swapElements = function(siblings, subjectIndex, objectIndex) {
// Get subject jQuery
var subject = $(siblings.get(subjectIndex));
// Get object element
var object = siblings.get(objectIndex);
// Insert subject after object
subject.insertAfter(object);
}
$(function() {
swapElements($('li'), 0, 1);
});
答案 2 :(得分:0)
您可以在此处将列表换成另一个
$.fn.equals = function(compareTo) {
if (!compareTo || this.length != compareTo.length) {
return false;
}
for (var i = 0; i < this.length; ++i) {
if (this[i] !== compareTo[i]) {
return false;
}
}
return true;
};
function swap(a, b) {
a = $(a); b = $(b);
if (a.length !== b.length) throw "Each list must be of equal length.";
a.each( function(i,e){ _swap(e,b[i]) } );
function _swap(a, b) {
a = $(a); b = $(b);
if (a.equals(b)) {return;}
if (a.next().equals(b)) {a.before(b); return;}
if (b.next().equals(a)) {b.before(a); return;}
var tmp = $('<span>').hide();
a.before(tmp);
b.before(a);
tmp.replaceWith(b);
}
};
答案 3 :(得分:0)
https://jsfiddle.net/2c7Ltopf/1/
var swapElements = function(siblings, subjectIndex, objectIndex) {
// Get subject jQuery
var subject = $(siblings.get(subjectIndex));
// Get object element
var object = $(siblings.get(objectIndex));
// Insert subject after object
subject.insertAfter($(siblings.get(objectIndex)));
if(objectIndex!==subjectIndex+1)
$(siblings.get(objectIndex)).insertBefore($(siblings.get(subjectIndex+1)));
}
$(function() {
swapElements($('li'), 1, 4);
});
答案 4 :(得分:0)
我做了一个易于使用的jQuery扩展
jQuery.fn.swap = function (newIndex) {
if (!Number.isInteger(newIndex) && !['up', 'down'].includes(newIndex)) {
throw new Error('Incorrect index format! Allowed formats are: "up", "down" or an index of the sibling to swap with');
}
if (Number.isInteger(newIndex)) {
this.insertBefore(this.siblings()[newIndex]);
} else {
if (newIndex === 'up') {
this.insertBefore($(this.siblings()[this.index() - 1]));
} else {
this.insertAfter($(this.siblings()[this.index()]));
}
}
}
在包含以上示例之后,该脚本可用于jquery对象,例如:
$(this).swap('up');
$(this).swap('down');
$(this).swap(1);