简体   繁体   English

单击按钮切换div位置

[英]click button to switch div positions

Brief Explanation: I have div1 and div2 onside a <div> . 简要说明:我将div1div2放在<div> On right click i open context menu which has a button switch . 右键单击我打开上下文菜单,其中有一个按钮开关

On clicking this button i want div1 and div2 to switch positions, 单击此按钮我希望div1和div2切换位置,

attached pic for your reference: 附图片供您参考: 在此输入图像描述

here is my code: 这是我的代码:

 $(document).on("contextmenu", "div", function(event) { // alert("right clicked"); event.stopPropagation(); this.clickedElement = $(this); event.preventDefault(); $(this.clickedElement).addClass('selecteddiv'); $(".custom-menu4").show(); $(".custom-menu4 li").unbind().click(function() { switch ($(this).attr("data-action")) { case "second": $(".custom-menu4").hide(); $(".selecteddiv").removeClass('selecteddiv'); break; case "first": alert("clicked switch"); break; } }) // alert("add"); }); 
 .selecteddiv { border: 1px solid rgb(180, 13, 172); } .custom-menu4 { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="click" style="padding: 20px"> <div class="switch">Hello</div> <div class="switch">World</div> </div> <ul class='custom-menu4'> <li data-action="first">Switch</li> <li data-action="second">Cancel</li> </ul> 

link to jsfiddle 链接到jsfiddle

On clicking the switch button, the div1 should switch position with div2, i mean in whatever positions they are, they should switch. 单击开关按钮时,div1应该用div2切换位置, 我的意思是无论它们在什么位置,它们都应该切换。

Please help. 请帮忙。

You can do it by selecting the second element and prepending it to the div with class "click" so it becames the first. 您可以通过选择第二个元素并将其添加到具有“click”类的div来完成它,因此它成为第一个元素。

 $("li:contains('Switch')").click(function() { $('div.switch:last').prependTo('.click'); }) 
 .selecteddiv { border: 1px solid rgb(180, 13, 172); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="click" style="padding: 20px"> <div class="switch">Hello</div> <div class="switch">World</div> </div> <ul class='custom-menu4'> <li data-action="first">Switch</li> <li data-action="second">Cancel</li> </ul> 

You just need to select the first switchable element, and move it after the other one. 您只需选择第一个可切换元素,然后将其移动到另一个可切换元素之后。 Demo: 演示:

 $(document).on("contextmenu", "div", function(event) { event.stopPropagation(); event.preventDefault(); $('.selecteddiv').removeClass("selecteddiv"); $(this).addClass('selecteddiv'); $(".custom-menu4").show(); $(".custom-menu4 li").off().click(function() { switch ($(this).attr("data-action")) { case "second": $(".custom-menu4").hide(); $(".selecteddiv").removeClass('selecteddiv'); break; case "first": /***** This is the important bit, to do the switching ****/ var $div = $('.switch').first(); $div.next('.switch').after($div); break; } }) }); 
 .selecteddiv { border: 1px solid rgb(180, 13, 172); } .custom-menu4 { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="click" style="padding: 20px"> <div class="switch">Hello</div> <div class="switch">World</div> </div> <ul class='custom-menu4'> <li data-action="first">Switch</li> <li data-action="second">Cancel</li> </ul> 

$('.click').find('.switch').eq(0).appendTo($('.click'));

http://jsfiddle.net/ohw25Ltf/

I simplified this a lot 我简化了很多

 $(document).on("contextmenu","div", function(event) { event.stopPropagation(); event.preventDefault(); $(".custom-menu4").show(); }) $('#btn-cancel').click(function (evt) { $(".custom-menu4").hide(); }); $('#btn-switch').click(function (evt) { var $div = $('#top-divs div').first(); $('#top-divs').append($div); }); 
  .selecteddiv { border: 1px solid rgb(180, 13, 172); } .custom-menu4 { display: none; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="top-divs" style="padding: 20px"> <div class="switch">Hello</div> <div class="switch">World</div> </div> <ul class='custom-menu4'> <li id="btn-switch" data-action="first">Switch</li> <li id="btn-cancel" data-action="second">Cancel</li> </ul> 

Do this in JavaScript: 在JavaScript中执行此操作:

$(".custom-menu4 li").unbind().click(function() {
switch ($(this).attr("data-action")) {
  case "second":
    $(".custom-menu4").hide();
    $(".selecteddiv").removeClass('selecteddiv');
    break;
  case "first":
    alert("clicked switch");
    var selected = $("div.selecteddiv").html();
    var unselected = $("div").not(".selecteddiv").html();
    $("div.selecteddiv").html(unselected);
    $("div").not(".selecteddiv").html(selected);
    $(".selecteddiv").removeClass("selecteddiv");
    break;
}
})

You can use flex with order and keep the DOM elements in their original location. 您可以使用flex with order并将DOM元素保留在其原始位置。
With this technique, you could manipulate the ordering of multiple elements quite easily only by changing their order . 使用这种技术,您只需更改其order轻松操纵多个元素的order

 $(".switch-btn").click(function() { $('.switch').toggleClass('high-order'); }) 
 .click { display: flex; flex-flow: column wrap; padding: 20px; } .click > div { order: 1 } .click > div.high-order { order: 0; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="click"> <div>Hello</div> <div class="switch">World</div> </div> <button class="switch-btn">Switch</button> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM