3
다음과 같은 표가 있습니다.테이블 행 마우스 오버시 표 셀 표시
<table>
<thead>
<tr>
<th>Foo</th>
<th>Bar</th>
</tr>
</thead>
<tbody>
<tr class="data">
<td>Info here</th>
<td><a href"/url_here" class="edit">Edit</a></td>
</tr>
<tr class="data">
<td>More here</th>
<td><a href"/url_here" class="edit">Edit</a></td>
</tr>
</tbody>
</table>
내부의 행 위에 마우스를 올려 놓으면 수정 링크를 표시하고 싶습니다. 이 작업을 수행하는 몇 가지 방법을 시도했지만 동일한 문제가 계속 발생합니다. 내가 이것에 대해서 잘못 생각하고 있다고 가정합니다.
이것은 내가 현재 가지고있는 것입니다.
$('a[class*=edit]').hide();
$('tr[class*=data]').bind("mouseover", function(e) {
$(e.target).closest('a[class*=edit]').addClass("selected");
$('a[class*=selected]:first').show();
}).mouseout(function() {
$('a[class*=selected]').hide();
$('a[class*=edit]').removeClass("selected");
})
수정 링크 바로 위에 있지 않으면 기존 코드에 문제가 있습니다. 선택한 클래스를 추가하지 않는 것입니다. 위에서 언급 한 것처럼 선택한 클래스를 추가하려면 해당 행의 아무 곳이나 마우스를 올려야합니다. 또한 특정 행에 대한 수정 링크 만 표시되기를 원합니다.
어떤 도움이라도 내 머리카락을 몇 시간 동안 꺼내 주면 정말 도움이 될 것입니다. 감사!
Trival 그러나 열린
답변
몇 가지 :
$()
jQuery를 함수에 전달하는 문자열입니다. 현재 셀렉터를 사용하는 방식은 매우 명확하지는 않지만 격렬하게 비효율적입니다. 예를 들어=*
선택기를 사용하면 클래스 속성에서edit
위치의 모든 링크가 인 모든 링크를 찾으려고합니다. 따라서abceditabc
클래스의 링크는 일치합니다. 따라서 jQuery는 존재하지 않는 링크를 찾기 위해 필요한 것보다 훨씬 많은 작업을 수행합니다. 허용되는 사용법 대신에a.edit
과 같은 선택기 문자열을 사용하는 것이고 jQuery는 그것이 무엇인지 어떻게 얻는 지 신속하게 결정할 수 있습니다.this
은 이벤트가 현재 함수 내에서 작동되고있는 요소를 참조합니다. 이벤트 위임을 수행하지 않는 한 실제로는e.target
을 사용하지 않을 것입니다.e.target
이 형제가되기 때문입니다.closest
은 그 td를 트래버스하여 다음 td까지 링크까지 트래버스 할 수 없습니다. 그리고 그렇게하더라도, 필요하지 않으므로 이것을 피하고 싶을 것입니다. 이는 테이블 행에서 링크를 내려다 보는 것이 훨씬 쉽기 때문에 두 번째 요점과 관련이 있습니다.그래서, 마음에 이러한 것들을 유지, 당신은 당신이에 무엇을 다시 작성할 수 있습니다 :
당신은 코드 당신이 here 게시 된 HTML에 작용하는이 코드를 볼 수 있습니다. FF, IE에서 나를 위해 작동합니다.
몇 가지 더 제안 :
console.log(this);
을 사용하면 절제 할 수없는 기능입니다.출처
2009-04-25 03:15:50
완벽하고 간단합니다. 당신과 bendewey는 질문에 빠지기에 관해서 괴물 같이이다. 네 비밀이 뭐니? PS ... Gators (그리고 Golden Knights 역시 ..하지만 그래 ...). ;) – KyleFarris
어 오. 당신의 의견에 불쾌감을 표시하지 마십시오. ;) 내 비밀은 내 손에 너무 많은 시간을 보내고있다. –
정확히 원했던 방식으로 작동합니다. 내가 잘못 된 곳을 설명해 주셔서 감사합니다. 나는 단지 다시 찾으려고 노력하고 있었다. 그러나 당신이 좋아하는 것에 따라 나의 전체의 이슈는 많이 선택하려고 노력하고 있었다. 감사. – gregf
내가 논리가 맞다고 가정하면 다음과 같이 시도해보십시오.
귀하의 특정 오류가 가장 가능성이 당신이 나무를 UP traveses
closest
방법을 사용하고 있다는 사실과 관련이있다.업데이트 : 코드가 작동하지 않는 또 다른 이유는 jquery document.ready 기능을 사용하지 않기 때문입니다. 내 코드를 업데이트했습니다.
출처
2009-04-25 03:00:01 bendewey
고맙지 만이 코드는 편집 링크 위로 마우스를 올리면 선택한 클래스를 추가하지 않습니다. 가장 가까운 방법이 가장 적합한 방법인지는 확실하지 않습니다. 나는 오늘 밤 이것을하기 위해 3 가지 또는 4 가지의 다른 방법을 시도해 보았고 그들 각각은 자신 만의 이슈들을 가지고있다. 이것은 내가 만든 마지막 시도였습니다. – gregf
가장 최근의 예제에서는 마우스를 올렸을 때 tr에 선택한 클래스를 추가 한 다음 링크를 찾고 보여줍니다. 완료 한 호버링 (예 : 마우스 아웃)이 끝나면 tr에서 선택한 클래스를 제거하고 편집 링크를 찾아 숨 깁니다. 이것은 올바른 논리인가? – bendewey
그의 의도는 선택된 클래스를 링크 자체에 추가하는 것이 었습니다. 링크 자체에 선택 클래스를 추가하는 것이 었습니다. 한 번에 단 하나만 표시해야하기 때문에 원형처럼 보입니다. 선택한 스타일로 항상 스타일을 지정할 수 있기 때문입니다. –
관련 문제