2016-08-02 52 views
2

我试图重新排序一个数值在错误的地方,但它的位置不能修改传统的HTML表。单独在一行上运行jQuery函数

我已经运行这个脚本来尝试重新排序td的,但是我遇到了问题,其中的大小重新排序好,但我们得到两个行的复制到一个例如大小会去8, 8,10,10,12,12等

我试过运行各种不同的每个循环,没有运气。任何人都可以给我一个提示吗?

下面是表格式,下面就是我一直在使用,试图重新排序的代码中的取出每个回路因为它不是为我工作..

<div id="attributeInputs" class="attribute-inputs js-type-grid"> 
    <table class="js-grid"> 
    <thead> 
     <tr> 
      <th class="js-col1"></th> 
      <th class="js-col2" colspan="8"></th> 
     </tr> 
     </thead> 
     <tbody><tr><th rowspan="1"></th> 
     <th class="js-rowtitleX">10</th> 
     <th class="js-rowtitleX">12</th> 
     <th class="js-rowtitleX">14</th> 
     <th class="js-rowtitleX">16</th> 
     <th class="js-rowtitleX">18</th> 
     <th class="js-rowtitleX">20</th> 
     <th class="js-rowtitleX">22</th> 
     <th class="js-rowtitleX">8</th> 
     </tr> 
    <tr> 
    <th class="js-rowtitleY">Red</th> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="10" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="12" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="14" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="16" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="18" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="20" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="22" data-attvalue2="Red" <span class="status">In stock</span></td> 
    <td class="js-gridBlock js-In_stock" data-attvalue1="8" data-attvalue2="Red" <span class="status">In stock</span></td> 

</tr> 
<tr> 
<th class="js-rowtitleY">Blue</th> 
<td class="js-gridBlock js-In_stock" data-attvalue1="10" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="12" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="14" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="16" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="18" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="20" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="22" data-attvalue2="Blue" <span class="status">In stock</span></td> 
<td class="js-gridBlock js-In_stock" data-attvalue1="8" data-attvalue2="Blue" <span class="status">In stock</span></td> 
</tr> 
</tbody 
</table> 
</div> 

$("#attributeInputs > table > tbody > tr > td").sort(sort_td).appendTo('#attributeInputs > table > tbody > tr:nth-child(n+2)'); 
    function sort_td(a, b){ 
        return ($(b).data('attvalue1')) < ($(a).data('attvalue1')) ? 1 : -1;} 
+0

您是否尝试过通过'th'元素寻找使用。每(),并在阵列中存储的值,然后排数组和循环数组加回? – AdamMcquiff

回答

2

问题是因为你追加的选择器中有两个元素,因此元素被复制。要解决这个问题,你应该遍历tr元素,并在这些元素中对td进行排序。试试这个:

$("#attributeInputs > table > tbody > tr").each(function() { 
    $(this).find('td').sort(sort_td).appendTo(this); 
}) 

Working example

+0

谢谢你Rory!我知道这会很简单。 – NatsWhiskas