2012-06-24 8 views
4

현재 rowspanned "행"의 색인을 얻는 방법을 알아 내려고합니다 (rowspanned 인 셀이라 할지라도).jQuery - 행 개수/행 인덱스 색인을 가져 오기

<table> 
    <tr> 
     <td rowspan="2">First</td> 
     <td> First 1 1 </td> 
     <td> First 2 1 </td> 
    </tr> 
    <tr> 
     <td> First 2 1 </td> 
     <td> First 2 2 </td> 
    </tr> 
    <tr> 
     <td rowspan="2">Second</td> 
     <td> Second 1 1 </td> 
     <td> Second 2 1 </td> 
    </tr> 
    <tr> 
     <td> Second 2 1 </td> 
     <td> Second 2 2 </td> 
    </tr> 
</table> 

테이블의 셀을 클릭하면 "행 스팬 된"행을 어떻게 계산합니까?

예를 들어 "두 번째"셀 중 하나를 클릭하면 "2"가되고 "첫 번째"셀 중 하나를 클릭하면 "1"이됩니다.

row=$(this).parent().parent().children('tr').filter(function (index) { 
    return $(this).children('td[rowspan]'); }).index($(this).parent()); 

row=$(this).parent().parent().children('tr:contains("td[rowspan]")') 
    .parent().parent().index($(this).parent()); 

및 정렬의이

$row=$(this).parent(); 
while ($row.children('td:eq(0)').attr("rowspan").length<=0) 
    $row=$row.prev(); 
span=$row.children('td:eq(0)').attr("rowspan"); 
row=Math.floor(parseInt($(this).parent().parent().children().index($(this).parent()))/span); 

작업을하지만,이 경우에만 작동있어주고 :

내가 해봤 여러 가지이 포함 rowspan 셀이 있다는 것을 ... 그리고 모든 행에 동일한 rowspan이 있다고 가정합니다.

나는이 사이트에서 일하려고했지만 너무 멀어 질 수 없었다.


jquery selector to count the number of visible table rows?
JQuery: How to select rows from a table
Table row and column number in jQuery

답변

3

첫 번째 열의 셀 속성이 rowspan 인 배열을 만드는 것도 한 가지 방법입니다. 여기에서 클릭 된 행의 인덱스를 가져와 rowspan 배열을 반복하면서 범위의 범위를 뺍니다.

$("td").click(function() { 
    var $this = $(this); 
    var rowIndex = $this.closest("tr").index(); 
    $this.closest("table").find("tr").map(function() { 
     return $(this).find("td:first").attr("rowspan") || 1; 
    }).each(function(index) { 
     if ((rowIndex -= this) < 0) { 
      alert(index + 1); // 'index' is zero-based. 
      return false; 
     } 
    }); 
}); 

당신이 this fiddle에서 테스트 할 수 있습니다 : 당신이 영하로 이동 한 후에는 (제로) 인덱스가 있습니다.

+0

첫 번째 행에서 rowspan을 제거하고 세 개의 셀이 두 줄 밖에 없으면 "두 번째"셀은 없었습니다 웬일인지 클릭에 반응하지 않는다. .. 그것은 나다? – jao

+0

@ jao, 맞아, 나는 "no rowspan"사례를 적절히 고려하지 않았습니다. 이 문제가 해결되었습니다. –

+0

어쩌면 그것은 나뿐이지만 Second 2 1 및 Second 2 2를 클릭하면 "3"이됩니다. – m0dE

2

이 당신이 원하는 경우 확실하지; 하지만 자리에 ... 데이터가 여러분의 인생을 더 쉽게하기 위해 마크 업 속성을 추가하는이와

<table> 
    <tr data-index="0"> 
     <td rowspan="2">First</td> 
     <td> First 1 1 </td> 
     <td> First 2 1 </td> 
    </tr> 
    <tr data-index="1"> 
     <td> First 2 1 </td> 
     <td> First 2 2 </td> 
    </tr> 
    ... 
</table> 

을 고려 값을 얻는 것은 간단하다 :

$(this).parent().attr("data-index"); 
+0

"합법적"인 HTML5를 알고 있지만 이것이 우수 사례로 간주됩니까? 나는 분명히 내 인생을 더 편리하게 만들 것이다. – jao

+0

@ jao 확실히, 내가 아는 한 괜찮아. 이전 브라우저는 여전히 사용자 정의 속성을 검색 할 수 있습니다. 이 녀석에 따르면 IE6에서도 작동합니다. http://stackoverflow.com/questions/2412947/do-html5-custom-data-attributes-work-in-ie-6 – McGarnagle

3
var table = $('table');      // reference of table 
$('td').click(function() { 
    var perent = $(this).parent();   // find parent tr 
     index= table.find(perent).index(); // get index of tr 
    alert(index); 
}); 

DEMO

var table = $('table'); 
$('td').click(function() { 
    var tdWithRowSpan = $(this).siblings('td[rowspan]').length ? // if siblings td[rowspan] exists 
          $(this).siblings('td[rowspan]') :  // get that td 
           $(this).parent().prev('tr').find('td[rowspan]'); // else find closest td[rowspan] 


    index = table.find('td[rowspan]').index(tdWithRowSpan); // get index 
    alert(index); 
}); 

DEMO

+0

@jao 내 대답과 데모를 확인합니다. 현재의 HTML을 변경하지 않고 문제를 해결할 것이라고 생각하십시오. – thecodeparadox

+0

그러면 0부터 1 행, 1-> 2 행, 2-> 3 행, 3> 4 행이됩니다.나는 1-> 1 행, 1-> 2 행, 2-> 3 행, 2-> 4 행이 필요합니다. 행 번호를 2로 나누면 Math.floor로 나눌 수 있습니다. – jao

+0

2 개 이상의 rowspan을 가지고 있다면 "rowspan go prev()?"에 넣어도됩니다. 또는 로우 스팬이 없으면 충돌이 발생할 것입니다. – jao