2015-09-01 1 views
0

Найдите ниже мою структуру таблицы.Перемещение столбцов из одной строки в другую существующую строку в jQuery

<table> 
    <tbody> 
     <tr> 
      <td>A</td> 
      <td>B</td> 
      <td>C</td> 
      <td>D</td> 
      <td>E</td> 
     </tr> 
     <tr> 
     </tr> 
    </tbody> 
</table> 

Я хочу, чтобы сделать вид, как

<table> 
    <tbody> 
     <tr> 
      <td>A</td> 
      <td>B</td> 
      <td>C</td> 
     </tr> 
     <tr>    
      <td>D</td> 
      <td>E</td> 
     </tr> 
    </tbody> 
</table> 

Move 3 колонки из первой строки и вставить во второй существующей строки с помощью JQuery. Пожалуйста, предложите итеративно сделать это, когда количество столбцов в строке превышает 3, затем вставьте в новую существующую строку

ответ

0

Вы можете попробовать это:


$("tbody td:nth-child(3n)") 
    .css("background-color", "lightblue") 
    .after("myPointer"); 


$("tbody").each(function(){ 

    /* update new TR's based on "myPointer" */ 
    var new_html = $(this).html().replace(/myPointer/g, "</tr><tr>"); 
    $(this).html(new_html); 



    /* bonus - remove empty TR's */ 

    $("tr", this).each(function(){ 
    // loop through all "tr" in "this"-"tbody" scope 

     if ($("td", this).length == 0) { 
     // if there are zero "td" in "this"-"tr" scope 

      $(this).remove(); 
      // then remove "$(this)"-"tr" 

     } 

    }); 


}); 

Jsfiddle here.

+0

Это работает как шарм :-) – Anitha

+0

Привет, не могли бы вы помочь включить это в веб-страницу, где есть много таблиц, а не только это. Я хочу, чтобы это применялось к одной таблице. Но когда я использую это на моей текущей странице, myPointer добавляется повсюду, и он меняет полный html. – Anitha

+0

@ Анита. Я обновился в соответствии с вашими критериями. Надеюсь, поможет. –

2

Хороший вопрос. Давайте попробуем так:

$(function() { 
    // Create two temp rows. 
    a = $("<tr />"); 
    b = $("<tr />"); 
    // Find our TR and loop in all the TDs. 
    $("tr").first().find("td").each(function() { 
    if (a.find("td").length < 3) 
     a.append(this); 
    else 
     b.append(this); 
    }); 
    c = $("tr").first().closest("tbody"); 
    $("tr").first().remove(); 
    $("tbody").append(a); 
    $("tbody").append(b); 
}); 

Snippet

$(function() { 
 
    // Create two temp rows. 
 
    a = $("<tr />"); 
 
    b = $("<tr />"); 
 
    // 
 
    $("tr").first().find("td").each(function() { 
 
    if (a.find("td").length < 3) 
 
     a.append(this); 
 
    else 
 
     b.append(this); 
 
    }); 
 
    c = $("tr").first().closest("tbody"); 
 
    $("tr").first().remove(); 
 
    $("tbody").append(a); 
 
    $("tbody").append(b); 
 
});
<script src="https://code.jquery.com/jquery-1.9.1.js"></script> 
 
<table> 
 
    <tbody> 
 
    <tr> 
 
     <td>A</td> 
 
     <td>B</td> 
 
     <td>C</td> 
 
     <td>D</td> 
 
     <td>E</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

Я не вижу каких-либо изменений после реализации этого JavaScript. Он не перемещает столбцы в существующую строку. – Anitha

+0

@Anitha Вы могли запустить фрагмент? –

+0

Спасибо, Правэвен. Я могу запустить этот фрагмент, но если количество столбцов в первой строке превышает 6. Его нужно разбить и вставить в 2 другие строки, которые не работают. – Anitha

0

Вот другая версия:

<table> 
    <tbody> 
     <tr> 
      <td>A</td> 
      <td>B</td> 
      <td>C</td> 
      <td>D</td> 
      <td>E</td> 
     </tr> 
     <tr> 
     </tr> 
    </tbody> 
</table> 
<button id="btnClick">Format</button> 

    $("#btnClick").click(function() { 
    $('table tbody tr').each(function(index,options) 
    { 
     $(this).find('td').each(function(index1,options1) 
     { 
      if(index1 > 2) 
      { 
       $('table tbody tr').eq(index+1).append($(this));   
      } 
     });   

    }); 
}); 

Пример: http://jsfiddle.net/zo3hh2ye/15/

+0

Это работает только для увеличения первой строки, но не для всех строк, итеративно. – Anitha

Смежные вопросы