将(每个)元素移动到第一个匹配的元素
Move (each) element to first-matched element
我已经为此绞尽脑汁一段时间了:我需要一个 jQuery 函数来在第一个 .THAT
之后移动 .THIS
的每个实例.我将其分解为这个简单的 HTML 示例:
<table><tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="3a THIS">3a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
</tr>
<tr>
<td class="1a THIS">1a</td>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="5a">5a</td>
</tr></table>
我认为这可行
var source = jQuery('.THIS');
var destination = jQuery(source).nextAll('.THAT');
jQuery(source).insertAfter(destination);
但是每当我尝试这样做时,两个源 (.THIS
) 都会在 .THAT
的最后一个实例之后移动,如下所示:
<table><tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
</tr>
<tr>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="3a THIS">3a</td>
<td class="1a THIS">1a</td>
<td class="5a">5a</td>
</tr></table>
而不是这个:
<table><tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
<td class="3a THIS">3a</td>
</tr>
<tr>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="1a THIS">1a</td>
<td class="5a">5a</td>
</tr></table>
那么如何使用 jQuery 在第一个实例之后移动每个实例?
您需要单独处理每个 .THIS
,并将其放在 nextAll()
结果中的 第一个 条目之后。
var source = jQuery('.THIS');
source.each(
function() {
var $this = jQuery(this);
$this.insertAfter( $this.nextAll('.THAT')[0] );
}
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="3a THIS">3a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
</tr>
<tr>
<td class="1a THIS">1a</td>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="5a">5a</td>
</tr>
</table>
我已经为此绞尽脑汁一段时间了:我需要一个 jQuery 函数来在第一个 .THAT
之后移动 .THIS
的每个实例.我将其分解为这个简单的 HTML 示例:
<table><tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="3a THIS">3a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
</tr>
<tr>
<td class="1a THIS">1a</td>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="5a">5a</td>
</tr></table>
我认为这可行
var source = jQuery('.THIS');
var destination = jQuery(source).nextAll('.THAT');
jQuery(source).insertAfter(destination);
但是每当我尝试这样做时,两个源 (.THIS
) 都会在 .THAT
的最后一个实例之后移动,如下所示:
<table><tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
</tr>
<tr>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="3a THIS">3a</td>
<td class="1a THIS">1a</td>
<td class="5a">5a</td>
</tr></table>
而不是这个:
<table><tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
<td class="3a THIS">3a</td>
</tr>
<tr>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="1a THIS">1a</td>
<td class="5a">5a</td>
</tr></table>
那么如何使用 jQuery 在第一个实例之后移动每个实例?
您需要单独处理每个 .THIS
,并将其放在 nextAll()
结果中的 第一个 条目之后。
var source = jQuery('.THIS');
source.each(
function() {
var $this = jQuery(this);
$this.insertAfter( $this.nextAll('.THAT')[0] );
}
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tr>
<td class="1a">1a</td>
<td class="2a">2a</td>
<td class="3a THIS">3a</td>
<td class="4a">4a</td>
<td class="5a THAT">5a</td>
</tr>
<tr>
<td class="1a THIS">1a</td>
<td class="2a">2a</td>
<td class="3a">3a</td>
<td class="4a THAT">4a</td>
<td class="5a">5a</td>
</tr>
</table>