สร้าง rowspan เมื่อเซลล์เหมือนกัน

ฉันมีตารางเช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการ rowspan ในคอลัมน์ 'model' เมื่อเนื้อหาของเซลล์เหมือนกัน

ตารางมีฟังก์ชันตัวกรอง ซึ่งทำให้ colspan "คงที่" ไม่ใช่วิธีแก้ปัญหา

ฉันพบคำถามเดียวกันนี้:
https://codereview.stackexchange.com/questions/6363/spanning-table-cells-automatically-between-same-value-cells
แต่น่าเสียดายที่ไม่ได้ผลสำหรับฉัน

ตัวอย่างที่ดีมากก็อยู่ที่นี่เช่นกัน:
https://stackoverflow.com/a/1294964/1861097 แต่สำหรับ colspan เท่านั้น.

สำหรับการเรียงลำดับและการกรอง ฉันใช้ http://datatables.net

ดูตารางได้ที่นี่: http://ipt.czechbattlefield.info (เปลี่ยนเป็นไฟล์แนบ)


person Johncze    schedule 26.12.2012    source แหล่งที่มา
comment
การกรองควรจะทำงานอย่างไรในภายหลัง?   -  person Alexander    schedule 27.12.2012
comment
ฉันไม่เข้าใจ คุณต้องการแสดงเฉพาะรายการที่แตกต่างกันในตารางของคุณหรือไม่?   -  person Pedro Estrada    schedule 27.12.2012
comment
ไอคอนเหล่านั้นดูเหมือนทำสิ่งพิเศษ - จะเกิดอะไรขึ้นกับไอคอนเหล่านี้เมื่อคุณยุบแถว...?   -  person Sampson    schedule 27.12.2012
comment
ฉันเชื่อว่าคุณหมายถึง rowspan   -  person Shmiddty    schedule 27.12.2012
comment
แสดงรหัสที่คุณใช้ในการกรองตาราง แน่นอนว่าจะต้องมีการรวมสคริปต์การครอบคลุมเซลล์เข้าไปด้วย แสดงให้เราเห็นว่าคุณได้ลองใช้สคริปต์ที่คุณพบอย่างไร   -  person Bergi    schedule 27.12.2012
comment
รหัสของคุณอยู่ที่ไหน? วางโค้ดของคุณบน jsfiddle หรือ codepen   -  person Ji_in_coding    schedule 25.10.2016


คำตอบ (1)


ฉันเขียนตัวอย่างเกี่ยวกับวิธีการขยายตารางใด ๆ โดยใช้ jquery

โปรดทราบว่าโค้ดใช้งานได้ภายใต้สมมติฐาน 1 ข้อเท่านั้น: คอลัมน์ที่คุณต้องการขยายแถวถูกจัดเรียง

คุณสามารถเล่นกับมันบน Codepen (ลองแก้ไข indexOfColumnToRowSpan)

JS:

$(function(){

  //assumption: the column that you wish to rowspan is sorted.

  //this is where you put in your settings
  var indexOfColumnToRowSpan = 0;
  var $table = $('#myTable');


  //this is the code to do spanning, should work for any table
  var rowSpanMap = {};
  $table.find('tr').each(function(){
    var valueOfTheSpannableCell = $($(this).children('td')[indexOfColumnToRowSpan]).text();
    $($(this).children('td')[indexOfColumnToRowSpan]).attr('data-original-value', valueOfTheSpannableCell);
    rowSpanMap[valueOfTheSpannableCell] = true;
  });

  for(var rowGroup in rowSpanMap){
    var $cellsToSpan = $('td[data-original-value="'+rowGroup+'"]');
    var numberOfRowsToSpan = $cellsToSpan.length;
    $cellsToSpan.each(function(index){
      if(index==0){
        $(this).attr('rowspan', numberOfRowsToSpan);
      }else{
        $(this).hide();
      }
    });
  }

})();

HTML:

<table  id="myTable">
 <tbody>
   <tr>
     <th align="left">A</th>
     <th align="left">B</th>
     <th align="left">C</th>
     <th align="left">D</th> 
   </tr>
   <tr>
     <td>Apple</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Apple</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Apple</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Apple</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Apple</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Pear</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Pear</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Pear</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Orange</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Orange</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Orange</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Orange</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Orange</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>
   <tr>
     <td>Orange</td>
     <td>x</td>
     <td>y</td>
     <td>z</td>
   </tr>



</tbody>
</table> 
person Ji_in_coding    schedule 24.10.2016