2012-03-07 16 views
3

2つの要素が同じクラス名を持っているかどうかを確認する方法はありますか?私のコードは次のようになります...私は何をしたいのかjQuery:2つの要素が同じクラスを持っているかどうかを確認する方法

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

は、それが体内でクラスを一致する場合fooリンクに別のクラスを追加しています。リンク内のクラスの1つが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を。


編集理解するために、Internet Explorerの無力のために試してみて、口座する/使用/ .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'); 
      } 
     } 
    }); 

​​。それは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を:私は両方のIE のWindowsなしだと、私は、それをテストすることはできませんとはいえ、このアプローチは、動作するはずです。

参考文献:

+0

これはかなり良い見える..これはショットを与えるつもり! – Dustin

+0

*してください! =) –

+0

うん..これは完全に動作します!ありがとうございました!! – Dustin

0

jQueryのhasClass()メソッドを使用すると、他の人があるかもしれません、ソリューション

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

ここに1つの提案があるにあなたを導くでしょう(その優れている)だけでなく:)

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

OK、私があなたを正しく理解しているとすれば、このようなことをすることができます...

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"); 
} 

ご覧のとおり、Bodyタブに一致するクラスがあるかどうかを確認する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はそれほど変わることはありません。常にあなたの現在の要件にコード化し、可能な限りきれいにjavascriptを保つより良い – 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; 
    } 
}); 
のような最初の行を変更することができ、時間
関連する問題