2016-07-21 8 views
1

hasClass()を使用すると、指定された文字列で始まるクラスを検索できますか?
複数のクラスを調べて、文字列で始まるクラスが少なくとも1つ存在するかどうかを調べたいとします。hasClass()は文字列で始まります

string: "old" 

これは可能なのですか、含まれているかワイルドカード検索もできますか?

+0

あなたは... –

+0

document.getElementsByClassName( "古い")やっていることを提供します。 ... –

+0

より良い解決策のような音は、複数のクラスを使用することで、パーシャルを見る必要はありません。アトリビュートセレクタを使用することはできますが、個々のクラス名を調べることはなく、開始するクラス名を確認することもできます。 – epascarello

答えて

4

セレクタは次のようになります。[class^=old]

したがって:

$('[class^=old]') 

構文:

  • [attr^=vvv] =>すべての要素が属性attrを持って、その値がvvvで始まる]を選択します。

  • [attr$=vvv] =>すべての要素が属性attrを選択し、値の末尾がvvvになります。

  • [attr*=vvv] =>すべての要素が属性attrであることを選択し、その値にはvvvが含まれます。

IsないhasClass

あなたのケースでは、is方法がよりhasClass適している:

if (element.is('[class^=old]')){ 


    } 

そしてない

if (element.hasClass('[class^=old]')){ 


    } 

jQueryプラグイン:

その後、
$.fn.hasClassStartsWith=function(prefix){ 
    return $(this).is(`[class^=${prefix}]`); 
}; 

if (element.hasClassStartsWith('old')){ 
    // do your staff 
} 

DEMO

+0

答えは 'hasClassStartsWith'プラグインで更新されました –

+0

それは役に立ちますか? @agent –

+0

これは非常に役に立ちますが、私が使っているとき( "[class^= old]")私は間違っています... は( "[class * = old]")です。 多分([class =])does notは各クラスを個別に見ていますが、すべてのクラスを1つの文字列としてまとめていますか? hasClass(セレクタ)は各クラスを見てクラスの1つがセレクタかどうかを調べます。 –

1

基本的には2部チェックする必要があります。セレクタを実行すると、単語を含むクラスを見つけることができます。

"old"、 "cold"、 "bold"を見つけようとしています。あなたが使うことができない理由は、クラスが "古い"ことができ、古いものから始めることができないからです。

これを行うには、正規表現をループして一致させるよりも、クラスリストの先頭に単語が含まれているかどうかを確認してください。

var elems = $('[class*="old"]').filter(function() { 
 
    return $(this).attr("class").match(/(^|\s)old/); 
 
}).addClass("picked");
.picked { background-color: yellow; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="old">old</div> 
 
<div class="old-asdf">old-asdf</div> 
 
<div class="foo-old-asdf">foo-old-asdf</div> 
 
<div class="cold">cold</div> 
 
<div class="old foo">old foo</div> 
 
<div class="foo old">foo old</div> 
 
<div class="foo olddoo">foo olddoo</div> 
 
<div class="foo ald">foo ald</div>

関連する問題