아래 id1 이후로 가장 가까운 첫번째 tr 의 두번째 td 를 선택하려면..?
class 인 tr1, tr2, tr3, td1, td2 등은 실제로는 없는 코드이고, 설명을 하기 위해 덧달아 놓은 겁니다.
<table>
<tr>
<td>td01</td>
<td>td02</td>
</tr>
... (다수의 tr td 문 존재)
<tr class="tr1">
<td id="id1">td11</td>
<td>td12</td>
</tr>
<tr class="tr2">
<td class="td1">td21</td>
<td class="td2">td22</td>
</tr>
<tr class="tr3">
<td>td31</td>
<td>td32</td>
</tr>
</table>
<script>
alert($('#id1').parent().find('~tr').filter(':eq(0)').find('td:eq(1)'));
$('#id1').parent().find('~ tr').filter(':eq(0)').find('td:eq(1)').each(function(n){
alert($(this).html());
});
</script>
간단할듯 한데, 조금 복잡하네요.
id1 을 선택해서 parent 인 tr 로 올라갔다가 siblings 인 tr 들 중에서 첫번째 tr 을 선택하고,
td 들 중 두번째를 선택하면 됩니다만..
일단 id1 을 선택하려면, $('#id1') 하면 됩니다.
id1 을 감싸는 tr 인 tr.tr1 을 선택하려면, $('#id1').parent() 로 하면 되구요. 여기까진 너무 쉽죠..?
$('#id1 :parent') 라고 하면 어떠냐구요..? 작동 안 합니다. ㅠ. 공백 없이 해야지.. 라고 말하고픈 분이 계시겠지만..
공백없이 $('#id1:parent') 라고 하면 어떠냐구요..? 그냥 $('#id1') 와 같습니다. ~.
tr.tr1 아래에 있는 모든 tr 들을 선택하려면, $('#id1').parent().find('~ tr') 를 합니다.
물론, 공백없이 $('#id1').parent().find('~tr') 로 해도 동일합니다.
이렇게 하면 tr.tr2 와 tr.tr3 모두 선택됩니다.
이제는, 위에서 선택된 tr 들 중에서 첫번째 tr 인 tr.tr2 만 선택해야 하겠죠..?
find 를 쓸까요..? 아니죠, 이미 선택된 넘들 중에서 첫번째 tr 인 tr.tr2 를 선택해야 하니까, filter 를 써야죠.
$('#id1').parent().find('~tr').filter(':eq(0)')
이제 tr.tr2 까지 왔으니까 마지막으로 td.td2 를 선택해야겠네요.
$('#id1').parent().find('~tr').filter(':eq(0)').find('td:eq(1)')
jQuery 가 알아먹는 방식으로 기술하려 보니 조금은 복잡해졌네요.. ~.
그런데, ~ tr:eq(0) 를 하면 어떠냐는 분도 계실텐데.. 그러면 작동하지 않습니다.
.filter(':eq(0) td:eq(1)') 와 같이 사용하면 어떻겠냐는 분이 계실텐데.. filter 는 자신에게만 적용이 됩니다.
그러니까, .parent(), .find('~tr'), .filter(':eq(0)'), .find('td:eq(1)') 등의 요소를 모두 정확히 써야만 해요.
.Fine.
'Local Oriented > jQuery' 카테고리의 다른 글
Flick 기능을 PC 와 스마트폰 양쪽에서 적용 (0) | 2013.06.14 |
---|---|
jQuery noConflict, 다른 JS F/W 과 혼용시 충돌방지 (2) | 2013.06.07 |
jQuery find() 와 filter() 차이 (0) | 2013.05.30 |
iframe 안에 정의된 자바스크립트 변수를 iframe 밖에서 jQuery 로 접근하는 방법, contentWindow (2) | 2013.05.29 |
인터넷 익스플로러 IE 10 에서 $(this).get(0) 나 $(this)[0] 사용 불가 (2) | 2013.05.15 |