2012-03-07 2 views
3

두 요소의 클래스 이름이 같은지 확인하는 방법이 있습니까? 내 코드jQuery : 두 요소가 같은 클래스인지 확인하는 방법

<body class="foo bar cats"> 
<a href="#" class="foo">Link</a> 
<a href="#" class="puppies">Link</a> 

는 내가하고 싶은 것은 몸의 클래스를 일치하는 경우 foo 링크에 다른 클래스를 추가입니다 ... 다음과 같습니다. 내 링크의 클래스 중 하나가 jQuery와 본문의 클래스를 일치시키는 지 어떻게 확인합니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/1227286/get-class-list-for-element-with-jquery – Peter

+1

if ($ ('selector'). hasClass ('foo')) 경고 ('나는 클래스 foo, wohoo'); – ggzone

+0

[.hasClass()] (http://api.jquery.com/hasClass/) – phemios

답변

5

나는 좋을 것 :

$('a').each(
    function() { 
     var classes = this.classList; 
     for (var i=0,len=classes.length; i<len; i++){ 
      if ($('body').hasClass(classes[i])){ 
       $(this).addClass('bodySharesClass'); 
      } 
     } 
    });​ 

JS Fiddle demo합니다.


가/사용을 이해하기 위해 인터넷 익스플로러의 무능력에 노력해 계정을를 편집/ .classList을 구현 :

if (!document.createElement().classList){ 
    var useAttr = true; 
} 

$('a').each(
    function(i) { 
     var classes = []; 
     if (!useAttr){    
      classes = this.classList; 
     } 
     else { 
      classes = $(this).attr('class'); 
     } 
     for (var i=0,len=classes.length; i<len; i++){ 
      if ($('body').hasClass(classes[i])){ 
       $(this).addClass('bodySharesClass'); 
      } 
     } 
    }); 

JS Fiddle demo합니다. 이 IE을 고려하여, 내 이전 시도를 표시하기 때문에


을 편집, 실패했습니다. 한숨. 아직도! 나는 그것을 테스트 할 수 없습니다이라도 난 것처럼이 방법은 모두 IE 윈도우없이 작동해야합니다

$('a').each(
    function(i) { 
     var classes = this.className.split(/\s+/); 
     for (var i=0,len=classes.length; i<len; i++){ 
      if ($('body').hasClass(classes[i])){ 
       $(this).addClass('bodySharesClass'); 
      } 
     } 
    }); 

JS Fiddle demo합니다.

참고 :

+0

이것은 꽤 좋아 보입니다.이 기회를 줄 것입니다! – Dustin

+0

* *하십시오! =) –

+0

네 .. 이것은 완벽하게 작동합니다! 고맙습니다!! – Dustin

0

JQuery와 hasClass() 메소드를 사용하여 다른 사람이있을 수 있습니다, 솔루션

1
$('a').hasClass('foo').addClass('whatever'); 
0

여기에 한 가지 제안이 당신을 이끌 것입니다 (즉, 더 나은)뿐만 아니라 :)

$(document).ready(function() { 
    var $foo = $('.foo'); // select the foo link 
    if ($(body).hasClass($foo.attr('class'))) { 
     $foo.addClass('anotherClass'); 
    } 
}); 
3

확인, 내가 너를 올바르게 이해한다고 가정하면 ...

var link = $(".foo");//or select your link another way 
var linkClass = link.attr("class"); 
if($("body").hasClass(linkClass)){ 
    //link has matching class 
    link.addClass("newClass"); 
} 

나는 01을 사용했다.본문 탭에 일치하는 클래스가 있는지 확인하는 JQuery 함수입니다.


하면 잠재적으로이 같은 그것을 할 수 이상의 클래스 이름이됩니다 링크 ...

var link = $(".foo");//or select your link another way 
var linkClass = link.attr("class"); 
var classList = linkClass.split(/\s+/); 

var matchFound = false; 

for(var i = 0; i < classList.length; i++){ 
    if($("body").hasClass(classList[i])){ 
     //link has matching class 
     matchFound = true; 
    } 
} 

if(matchFound){ 
    link.addClass("newClass"); 
} 
또한

, 같은에서 모든 링크를 처리하려면 당신이 JQuery each()에 모든 포장 등 같은 첫 번째 줄을 바꿀 수 시간 ...

$("a").each(function(index){ 
    var link = $(this); 

    //the rest of the above code here 
}); 
+0

여러 클래스가있는 링크는 어떻게해야합니까? – xdazz

+1

@xdazz : 분명히 링크 된 문서의이 부분을 읽지 않았습니다. "클래스가 요소에 할당 된 경우 .hasClass() 메서드는 다른 클래스가있는 경우에도 true를 반환합니다." – Piskvor

+0

@xdazz : 다른 질문이됩니다. html/javascript는 "what if 's"를 맞추려고 무의미하다. 현재 요구 사항을 코드화하고 가능한 한 깨끗한 상태로 자바 스크립트를 유지하는 것이 더 좋습니다. – musefan

0
var body_classes =$('body').attr('class').split(/\s+/); 
var foo_link = $('a.foo'); 
$.each(body_classes, function(index, item){ 
    if (foo_link.hasClass(item)) { 
     foo_link.addClass('class_you_want_to_add'); 
     return false; 
    } 
}); 
관련 문제