2016-01-25 2 views
1

У меня есть таблица вроде этого:Редизайн первый TD в HTML таблице RowSpan

<table> 
    <thead> 
     <tr> 
     <th></th> 
     <th>Col1</th> 
     <th>Col2</th> 
     <th>Col3</th> 
     <th>Col4</th> 
     <th>Col5</th> 
     </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td class="control"></td> 
     <td>AA</td> 
     <td>BB</td> 
     <td>CC</td> 
     <td>DD</td> 
     <td>EE</td> 
    </tr> 
    ... 
</table> 

Благодаря странице изменения размера Я хочу изменить эту таблицу, чтобы быть похожим на следующий дизайн таблицы. Изменение должно применяться к нечетным строкам только потому, что четные строки скрыты, и это показывает, когда я нажимаю на первый td, который имеет класс управления.

<table> 
    <tr> 
     <td rowspan="6" class="control"></td> 
    </tr> 
    <tr> 
     <td>Col1</td> 
     <td>AA</td> 
    </tr> 
    <tr> 
     <td>Col2</td> 
     <td>BB</td> 
    </tr> 
    <tr> 
     <td>Col3</td> 
     <td>CC</td> 
    </tr> 
<tr> 
     <td>Col4</td> 
     <td>DD</td> 
    </tr> 
    <tr> 
     <td>Col5</td> 
     <td>EE</td> 
    </tr> 
    ... 

Проверить эту ссылку https://jsfiddle.net/pmtgqmsa/2/

+0

Как о двух разных таблицах и играть с 'visibility'? – Rayon

+0

@RayonDabre Я не уверен, что это можно сделать с помощью css или javascript, но я предпочел иметь одну таблицу и изменить ее на javascript – user1010941

+0

Я не говорю, что ваш случай невозможен, но иметь дело с двумя разными таблицами - это лучший подход если стриктура DOM не слишком тяжелая. Таким образом, вы не беспокоите браузер много .. – Rayon

ответ

0

Наконец, я пробовал несколько раз, то я получил ответ

$('#myTable > thead > tr').css('display', 'none'); 
    $('#myTable tr.parent').each(function() { 
     var _html = ""; 
     var _newRow = ""; 
     var header = Array(); 
     $("#myTable tr th").each(function (i) { 
      header[i] = $(this).text(); 
     }); 
     $(this).find('td').each(function (i) {     
       if (i == 0) { 
        _html += "<td rowspan='6'>" + $(this).html() + "</td>"; 
       } 
       else { 
        _newRow += "<tr> <td> " + header[i] + " :</td> <td>" + $(this).html() + "</td> </tr>"; 
       } 
     }) 
     $(this).html(""); 
     $(this).html(_html); 
     $(_newRow).insertAfter($(this).closest("tr"));    
    }) 

Я надеюсь, что мой ответ поможет, кто ищет подобный код

1

Вы можете использовать гибкую форму для того, чтобы достичь такого рода задачи.

гибкая коробка, способная изменять текущий поток содержимого из строки в столбец. просто путь изменения flex-flow: column; к flex-flow: row;

Вот fiddle

Вы можете узнать больше о гибких коробках в css-tricks.

Поскольку это div теперь, у вас также не будет проблемы с номером строки/столбца. Вы можете свободно регулировать высоту и ширину.

+0

Хотя это хорошая идея, скрипка, которую вы показываете, не решает его проблемы. Это только изменение n элементов в строке до n элементов в столбце. Он хочет что-то более активное, где порядок не тот – Gavriel

+0

@Ryan Спасибо за ваш код, но я должен использовать таблицу вместо div. даже если это не соответствует тому, что я ищу, как вышеприведенное описание – user1010941

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