Javascript .insertBefore()在两个div之间切换位置(HTML)

Javascript .insertBefore()在两个div之间切换位置(HTML),javascript,jquery,insert,Javascript,Jquery,Insert,示例HTML: <h2 class="x1">1</h2> <h2 class="x2">2</h2> <h2 class="x3">3</h2> <h2 class="x4">4</h2> <h2 class="x5">5</h2> 所以我得到了这样的结果 $('.x2').insertBefore('.x5'); $('.x5').insertBefore('.x2');

示例HTML:

<h2 class="x1">1</h2>
<h2 class="x2">2</h2>
<h2 class="x3">3</h2>
<h2 class="x4">4</h2>
<h2 class="x5">5</h2>
所以我得到了这样的结果

$('.x2').insertBefore('.x5');
$('.x5').insertBefore('.x2');
1
3
4
5 <--- 
2 <--- 

我只需要选择要在
.x2
的下一个同级之前插入
.x5
的2个元素(而不是另一个)

,而不是在
.x2
本身之前

var next = $('.x2').next();
$('.x2').insertBefore('.x5');
$('.x5').insertBefore(next);

只有当
.x2
不是最后一个同级时,这才有效。

您希望在
.x2
的下一个同级之前插入
.x5
,而不是在
.x2
本身之前

var next = $('.x2').next();
$('.x2').insertBefore('.x5');
$('.x5').insertBefore(next);
只有当
.x2
不是最后一个兄弟姐妹时,这才有效。

试试看

var pos = $('.x2').index();
$('.x2').insertBefore('.x5');
$('.x5').insertBefore($('h2').eq(pos));
演示:

如果元素顺序发生变化,则前一个可能不起作用

演示:

试试看

var pos = $('.x2').index();
$('.x2').insertBefore('.x5');
$('.x5').insertBefore($('h2').eq(pos));
演示:

如果元素顺序发生变化,则前一个可能不起作用

演示:

试试这个:

HTML:

试试这个:

HTML:

使用临时div:

var x2 = $('.x2');
var x5 = $('.x5');
var div =$('<div>');

x2.replaceWith(div);
x5.replaceWith(x2);
div.replaceWith(x5);
varx2=$('.x2');
变量x5=$('.x5');
var div=$('');
x2.替换为(div);
x5.替换为(x2);
替换为(x5)的分区;
使用临时div:

var x2 = $('.x2');
var x5 = $('.x5');
var div =$('<div>');

x2.replaceWith(div);
x5.replaceWith(x2);
div.replaceWith(x5);
varx2=$('.x2');
变量x5=$('.x5');
var div=$('');
x2.替换为(div);
x5.替换为(x2);
替换为(x5)的分区;

从这个好的解决方案开始,您可以构建自己的jQuery函数来处理交换机功能

代码如下:

jQuery.fn.swapWith = function(to) {
    return this.each(function() {
        var copy_to = $(to).clone(true);
        var copy_from = $(this).clone(true);
        $(to).replaceWith(copy_from);
        $(this).replaceWith(copy_to);
    });
};
然后像这样使用它:

$(document).ready(function () {
    $('.x5').swapWith('.x2');
});
我很欣赏这个解决方案,因为使用该方法可以保留所有绑定事件


这里有一个有用的工具:

从这个好的解决方案开始,您可以构建自己的jQuery函数来处理交换机功能

代码如下:

jQuery.fn.swapWith = function(to) {
    return this.each(function() {
        var copy_to = $(to).clone(true);
        var copy_from = $(this).clone(true);
        $(to).replaceWith(copy_from);
        $(this).replaceWith(copy_to);
    });
};
然后像这样使用它:

$(document).ready(function () {
    $('.x5').swapWith('.x2');
});
我很欣赏这个解决方案,因为使用该方法可以保留所有绑定事件


这里有一把工作小提琴:

好的,那么@arun anwser最后一次试奏可以吗?@l2aelba:我不知道,试试看:)好的,那么@arun anwser最后一次试奏可以吗?@l2aelba:我不知道,试试看:)非常感谢:D忘了。index()+1个好主意:D非常感谢:D忘了。index()+1个好主意:D开始;像这样的东西?可能是复制品。请参阅bobince回答:。谢谢,似乎他们使用了.before()和.after():D@FelixKling我更喜欢保罗·贝甘蒂诺的解决方案:-)@Edward告诉我为什么;像这样的东西?可能是复制品。请参阅bobince回答:。谢谢,似乎他们使用了.before()和.after():D@FelixKling我更喜欢Paolo Bergantino解决方案:-)@Edward请告诉我为什么?我很感谢你链接到原始问题,但由于这是一个精确的副本,你应该投票以重复的方式结束该问题。我感谢你链接到原始问题,但由于这是一个完全相同的副本,你应该投票以重复的方式结束该问题。
$(document).ready(function () {
    $('.x5').swapWith('.x2');
});