简体   繁体   English

在jQuery中一次将元素从一列移动到另一列?

[英]Moving elements from one column to other two at a time in jQuery?

I have two columns. 我有两列。 Left column with elements 左列与元素

1L, 2L, 3L, 4L, 5L, 6L....

Right column with elements 带有元素的右列

1R, 2R, 3R, 4R..... 

What I want to do is, if width is less than 991px, take two elements at a time from right column and put them in left column using jQuery. 我想做的是,如果宽度小于991px,则一次从右栏中获取两个元素,然后使用jQuery将其放在左栏中。 The final order should be 1L, 2L, 1R, 2R, 3L, 4L, 3R, 4R ..... If width is greater than 991px I want to rearrange the elements in original configuration. 最终顺序应为1L, 2L, 1R, 2R, 3L, 4L, 3R, 4R .....如果宽度大于991px,我想重新排列原始配置中的元素。

I don't know the number of elements in each column beforehand. 我不知道每一列中的元素数量。 Any of the columns might have more elements. 任何列都可能具有更多元素。 I want to keep moving elements until the elements in right column are zero or left column is all filled up to end. 我想一直移动元素,直到右列中的元素为零或左列中的所有元素都填满为止。 After that I want to append remaining elements to left column. 之后,我想将其余元素附加到左列。 Like this : 1L, 2L, 1R, 2R ...7L, 8L, 7R, 8R, 9R, 10R, 11R, 12R... 像这样: 1L, 2L, 1R, 2R ...7L, 8L, 7R, 8R, 9R, 10R, 11R, 12R...

up to this point. 到这一点。 I have following code: 我有以下代码:

 $('#right-col').children().slice(0,2).detach().insertAfter("#left-col .item:first");

It inserts only the first two elements from right column to left and leaves rest untouched. 它仅从右列到左插入前两个元素,而其余部分保持不变。 I tried to create a loop like this: 我试图创建一个像这样的循环:

 while($('#right-col').children().length>0) {
   $('#right-col').children().slice(0,2).detach().insertAfter("#left-col .item:first");
 }

This however puts all the elements after the first one (which is expected). 但是,这会将所有元素放在第一个元素之后(这是预期的)。 How can I put the elements two at a time together in the way I mentioned? 如何以我提到的方式一次将两个元素放在一起?

This is my HTML 这是我的HTML

<section class="col-md-8" id="left-col">
  <div class="item"> Blah blah blah </div>
  <div class="item"> Blah blah blah </div>
  <div class="item"> Blah blah blah </div>
  .
  .
  .
  <div class="item"> Blah blah blah </div>
</section>
<section class="col-md-4" id="right-col">
  <div class="item"> Blah blah blah </div>
  <div class="item"> Blah blah blah </div>
  <div class="item"> Blah blah blah </div>
  .
  .
  .
  <div class="item"> Blah blah blah </div>
</section>

Here is a JS fiddle : https://jsfiddle.net/pczbe0qv/ 这是一个JS小提琴: https : //jsfiddle.net/pczbe0qv/

In my opinion, you'd be best served by changing your layout to leverage "Column Reordering" built into Bootstrap. 我认为,最好通过更改布局以利用Bootstrap中内置的“列重新排序”来为您提供最佳服务。

Take a look at Column Ordering and Column Ordering in Bootstrap 看一下Bootstrap中的 列顺序列顺序

Something like this as an example ( jsFiddle ): 像这样的例子( jsFiddle ):

 <link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> <div class="row"> <div class="item col-xs-2 ">L1</div> <div class="item col-xs-2 ">L2</div> <div class="item col-xs-2 col-md-push-4">R1</div> <div class="item col-xs-2 col-md-push-4">R2</div> <div class="item col-xs-2 col-md-pull-4">L3</div> <div class="item col-xs-2 col-md-pull-4">L4</div> </div> <div class="row"> <div class="item col-xs-2 ">L1</div> <div class="item col-xs-2 ">L2</div> <div class="item col-xs-2 col-md-push-4">R1</div> <div class="item col-xs-2 col-md-push-4">R2</div> <div class="item col-xs-2 col-md-pull-4">L3</div> <div class="item col-xs-2 col-md-pull-4">L4</div> </div> 

Otherwise, to get the functionality you want, there are going to be some complex calculations involved that are going to be really easy to break. 否则,要获得所需的功能,将涉及一些复杂的计算,而这些计算将非常容易中断。

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

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