2011-08-01 3 views
1

나는 여기에서 새로운이야, 내가 원하는 것에 대한 비슷한 대답을 찾을 수 없다; 나는 진전을 이루었고 앞으로 나아갈 수 없다. 아래는 내 칼집입니다. 2 ~ 2 번째 TR 사이를 가리키면 색상이 바뀝니다. (첫 번째 TR은 제목이고 마지막 TR은 바닥 글). 마우스를 놓을 수있는 범위 사이에서 선택할 수있는 방법은 두 번째 TD와 두 번째 마지막 TD 만 포함하는 것입니다.jquery hover range of td

$('table#tblSchoolList tr:gt(0)').hover(function(){ 
    ////and not the last child (.next length = 0 means last) 
    if ($(this).next().length != 0){ 
     $(this).css("background", "red"); 
    } 
}, function(){ 
    $(this).css("background", ""); 
}) 

즉, 테이블 호버는 첫 번째 및 마지막 TR 및 TD를 제외합니다.

TIA.

+1

당신 만의 색상을 변경 뜻 알아낼 수 없다면 물론

, 당신은 항상 당신의 jQuery 솔루션을 유지할 수 있습니다 행을 가져갈 때 각 행의 두 번째 및 마지막 행 셀? – BoltClock

+0

요구 사항을 설명 할 때 위 코드가 저에게 효과적이었습니다 (첫 번째와 마지막 사이의 모든 tr을 강조 표시). http://jsfiddle.net/cK8Q5/1/ –

+0

예 BoltClock을 참조하십시오. Ken Redler는 tr 범위 선택을 개선했지만 내 질문은 해결하지 못합니다.셀의 수는 동적이며 개념은 tr과 같고 첫 번째 셀과 마지막 셀이 아닙니다. – Gian

답변

2
: 여기

$('#foo tr').slice(1,-1).hover(function(){ 
    $(this).find('td').slice(1,-1).toggleClass('highlight'); 
}); 

은 매우 간단한 예제

다음 선택자와 함께 .find()을 사용하여 각각 tr의 첫 번째 및 마지막 td을 제외 할 수 있습니다.

$('table#tblSchoolList tr:gt(0)').hover(function() { 
    if ($(this).next().length != 0) { 
     $(this).find('td:not(:first-child, :last-child)').css("background", "red"); 
    } 
}, function() { 
    $(this).find('td:not(:first-child, :last-child)').css("background", ""); 
}); 

마우스가 첫 번째 및 마지막 td 초를 초과하더라도 함수가 계속 트리거되지만 채색되지는 않습니다.

jsFiddle demo

또한 if 문에 대한 필요성을 제거, 당신의 tr들과 함께 선택기를 사용할 수 있습니다 약간 좋아요 ~로


$('table#tblSchoolList tr:not(:first-child, :last-child)').hover(function() { 
    $(this).find('td:not(:first-child, :last-child)').css("background", "red"); 
}, function() { 
    $(this).find('td:not(:first-child, :last-child)').css("background", ""); 
}); 
, 나는 내가 변환 할 수 있었다 발견 모든 jQuery 코드를 하나의 CSS 규칙 (최신 브라우저에서만 작동) :

당신은 오래된 브라우저와의 호환성을 원하거나 위의 CSS의 의미 :

jsFiddle demo

+1

re : CSS 전용 솔루션 - 아프거나 아프다 .-) – Alnitak

+0

정보를 제공해 주셔서 감사합니다. 잘 알고 CSS 규칙도 그렇게 작동합니다. – Gian

2

이 같은 slice를 사용하여 시도 할 수 있습니다 :

$('table#tblSchoolList tr').slice(1,-1).hover(function(){ 
    $(this).css("background", "red"); 
}, function(){ 
    $(this).css("background", ""); 
}); 

음수가 목록의 끝에서 오프셋을 지정하여. 그래서 :

slice(
    1, // omit first row 
    -1 // omit last row 
) 

이상 단순히 :

$('table#tblSchoolList tr').slice(1,-1).hover(function(){ 
    $(this).toggleClass('highlight'); 
}); 

(당신은 색상 반응을 처리하기 위해 highlight 클래스가 가정).


편집 :는 첫 번째와 마지막 열뿐만 아니라 행을 보장하기 위해 업데이트, 강조 표시되지 않습니다 (감사 @boltclock) : http://jsfiddle.net/redler/Mgd8f/

+0

'슬라이스'에 +1 그리고'toggleClass'에 –

+0

그래서 ...'td's는? 지금 당신이하는 일은 OP가 이미 가지고있는 것을 리펙토링하는 것뿐입니다. – BoltClock

+0

@BoltClock, 맞아. 그것을 놓쳤습니다. 수정. –