2009-11-27 4 views
0

내가하고있는 일은 내가 가져온 ID와 동일한 클래스 이름을 가진 모든 요소에 클래스를 추가하는 것입니다. 예를 들어, 모음의 id로 모음 항목을 가리키면, 이름 모음의 클래스가있는 모든 span 요소가 작동하게됩니다 (클래스 추가).jQuery 코드 리팩토링 및 DRY up

아무 문제없이 할 수 있습니다. 하지만 해당 클래스 이름으로 다른 많은 id 이름에 대해 동일한 작업을 수행하려고합니다. 예 : 자음, 세미 - 모음, 거문고, palatals 등

나는이 모든 것을 다른 기능으로 할 수 있지만 같은 일을 수행하지만 충분히 똑똑 할 기능을 호출하고 싶습니다. id의 이름과 클래스 이름을 생성합니다.

id 이름을 변수에 추출하고 클래스 이름에 할당하는 방법은 무엇입니까?

$("[id]").hover(function() { 
    $("." + this.id).addClass("highlight"); 
}, function() { 
    $("." + this.id).removeClass("highlight"); 
}); 

을하지만 반드시 권하고 싶지 않다 :

+0

난 그냥 CSS 또는 유일한 추가를 사용하여이 같은 효과가 크게 간소화 할 수 있다는 느낌이있어 이러한 아이를 캡슐화하는 요소의 클래스 제가 정교 할 수 있도록 HTML 코드와 구조를 게시하십시오. – duckyflip

+0

그것을 들여다 봤지만 고마워 해 주셔서 고맙습니다. 나는 HTML/CSS만으로는 그렇게 할 수 없다고 생각한다. – allesklar

답변

1

이 작업을 수행 할 수 있습니다. 나는 더 정적으로 그것을 정의하는 경향이있을 것이다 :

또는 이와 비슷한 것.

당신은 플러그인을 사용할 수
+0

나는 거의 작동하지만 "." + ids [i] 비트는 아무 것도하지 않습니다. 코드 3 번 라인에서이 코드를 테스트 해봤는데 작동합니다 : $ (this) .css ({ '커서': 'default'}); 하지만 어떤 이유로 인해 같은 줄에 다음과 같이 작동하지 않습니다. $ ("#"+ ids [i]) .css ({ '커서': '기본'}); 이 정보가 도움이 될 수 있기를 바랍니다. – allesklar

+0

두 번째 솔루션의 라인 3 – allesklar

+0

두 번째 코드 스 니펫의 4 번째 줄 (4 번째 줄)을 의미합니다. – allesklar

2

:

$.fn.highlight = function() { 
    return this.each(function() { 
     $(this).hover(function() { 
      var id = $(this).attr('id'); 
      $('.'+id).addClass('myclass'); 
     }); 
    }); 
} 

이 같이 호출 할 수

$(document).ready(function() { 
    $('span').highlight(); 
}); 
+0

스티어링 감사합니다. 일부 솔루션을 cletus 솔루션과 함께 사용하여 제대로 작동하게했습니다. 건배. – allesklar