2012-07-19 2 views
1

단순화 동적 JQuery와 선택

<table id="t1" border="1"> 
    <thead><tr><th>A</th><th>B</th><th>C</th></tr></thead> 
    <tfoot><tr><td>0</td><td>1</td><td>2</td></tr></tfoot> 
<tbody> 
    <tr><td>3</td><td>4</td><td>5</td></tr> 
    <tr><td>6</td><td>7</td><td>8</td></tr> 
    <tr><td>9</td><td>10</td><td>11</td></tr> 
    <tr><td>12</td><td>13</td><td>14</td></tr> 
    <tr><td>15</td><td>16</td><td>17</td></tr> 
</tbody> 
</table> 

가 난 단지 <tbody>에서 첫 번째와 세 번째 열을 선택하려면 다음 표를 감안할 때. 거대한 테이블의 경우 여러 열의 선택이 다를 수 있습니다. 다음 표현식은이 예제에서 올바른 선택을 리턴합니다.

var a = $('#t1 tbody tr td:nth-child(1), #t1 tbody tr td:nth-child(3)') 

하지만

var b = $('#t1 tbody tr td:nth-child(1), td:nth-child(3)') 

b 의지는 선택이 <tfoot>을 포함 반환합니다. b 결과 이상으로 첫 번째 요소가 누락되었습니다.

위의선택에 대해 X- 열 개수 중 가장 간단한 방법은 무엇입니까? 예 :

Select columns [1,4,5,6,7,8,9] 

http://jsfiddle.net/kkgian/4kdNt/2/

TIA

답변

1

동일한 행에 복수의 열을 선택 :

$('#t1 tbody tr td:nth-child(3n)'); //should get column 3, 6, 9, ... 
: 규칙적으로 이격 된 간격으로 열을 선택

$('#t1 tbody tr').find("td:nth-child(1), td:nth-child(3)"); 

0 그 추론로서

에서 (케이스 1, 3) 1에서 시작하여 다른 모든 요소를 ​​얻기 위해 : 열 선택 용

$('#t1 tbody tr td:nth-child(2n+1)'); //should get column 1, 3, 5, ... 

[1,4,5,6,7,8,9] :

var cols = [1,4,5,6,7,8,9]; 
$('#t1 tbody tr td').filter(function(idx) { 
    return $.inArray(idx+1, cols)!=-1; 
}); 

.filter() 사용하려는 것과 일치하는 요소의 집합을 감소시키는 방법이다 -이 경우 배열에 지정된 열 인덱스에 있습니다. 표현식이 true을 반환하는 모든 값이 포함됩니다. 참고 :.filter() 내에서 idx는 0부터 시작하므로 배열의 값이 1부터 시작하도록하려는 경우 1을 추가하십시오.

+0

http://api.jquery.com/nth-child-selector/ -'물론'도 – nbrooks

0
var arr = [1, 4, 5, 6, 7, 8, 9], 
    rows = $('#t1 tbody tr'), 
    tds = $('td', rows).map(function() { 
     if ($.inArray($(this).index(), arr) >= 0) 
      return this; 
    }); 

Demo

+0

'$ .inArray 작동 n 번째 자녀 (홀수) ()'는 부울을 리턴하지 않고, 값이 발견 된 색인 또는 -1 (색인 0을 제외한 모든 사실)을 리턴합니다. 또한'$ (this) .index()'를 사용하면 일치하는 집합에있는 요소의 색인을 반환합니다.이 경우 [0,1,2]는 5 번 반복됩니다. '1'이 배열에있는 유일한 값이기 때문에 다른 것들은 -1을 반환합니다. 이것은 진실입니다 - 그래서 패스합니다. '1'은 인덱스 0에 있으므로 거짓이며 실패합니다 -이 방법이 실제로 1과 3 열을 반환하는 유일한 이유입니다. 순수 우연의 일치 : – nbrooks