我有一张桌子要重组。该表如下所示:



    <table border=1>
    	<tr>
    		<td>image 1</td>
    		<td>image 2</td>
    		<td>image 3</td>
    		<td>image 4</td>
    	</tr>
    	 <tr>
    		<td>text 1</td>
    		<td>text 2</td>
    		<td>text 3</td>
    		<td>text 4</td>
    	</tr>
    	<tr>
    		<td>image 5</td>
    		<td>image 6</td>
    		<td>image 7</td>
    		<td>image 8</td>
    	</tr>
    	 <tr>
    		<td>text 5</td>
    		 <td>text 6</td>
    		<td>text 7</td>
    		<td>text 8</td>
    	</tr>
    </table>





我希望这是我的最终结果:



 <table border=1>
    	<tr>
    		<td>image 1</td>
    		<td>image 2</td>
    	</tr>
    	<tr>
    		<td>text 1</td>
    		<td>text 2</td>
    	</tr>
    	<tr>
    		<td>image 3</td>
    		<td>image 4</td>
    	</tr>
    	<tr>
    		<td>text 3</td>
    		<td>text 4</td>
    	</tr>
    	<tr>
    		<td>image 5</td>
    		<td>image 6</td>
    	</tr>
    	<tr>
    		<td>text 5</td>
    		<td>text 6</td>
    	</tr>
    	<tr>
    		<td>image 7</td>
    		<td>image 8</td>
    	</tr>
    	<tr>
    		<td>text 7</td>
    		<td>text 8</td>
    	</tr>
    </table>





我想出了如何将单元格移到新行:

$('table tr').each(function(e)
{
    $('<tr>').insertAfter(this).append($('>:gt(1)',this));
});


但是然后我想将第三行移到第二行。这段代码将在操作后每三行移动一次,但是我需要在操作前每三行移动一次:

$('table tr:nth-child(3n)').each(function(e)
{
    $(this).insertBefore($(this).prev());
});


我该如何实现?还有更好的方法吗?我在做行时尝试这样做,但是那也不起作用。我在这里有一个小提琴:

http://jsfiddle.net/2vd5kzq6/40/

我想这样做可以使桌子移动起来更加友好。因此,如果有人知道可以在CSS中使用的解决方案,那就更好了,但是我认为CSS会有很多操纵。

提前致谢!

最佳答案

您自己的解决方案已接近完成。您只犯了一个错误。

您不想交换每三行,而是每四行-1行!
对其进行可视化:您选择了3,6,9 ...行,但是您需要3,7,11 ...

因此,只需将您的代码并添加一个prev()即可:

$('table tr:nth-child(4n)').prev().each(function(e)
{
  $(this).insertBefore($(this).prev());
});


在此处查看结果:http://jsfiddle.net/2vd5kzq6/41/

10-07 18:36